麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

全面了解函數聲明與函數表達式、變量提升

2019-11-20 09:16:43
字體:
來源:轉載
供稿:網友

函數的聲明方式

在定義一個函數的時候通常有兩種聲明方式:

foo(){};   // 函數聲明var foo = function(){};  // 函數表達式

不同之處

1、函數表達式后面加括號可以直接執行
2、函數聲明會提前預解析

預解析

讓我們先看一個例子:

foo();     // 函數聲明foo_later();   // foo_later is not a functionfunction foo(){ console.log('函數聲明'); }var foo_later = function(){ console.log('函數表達式'); }

可以看到,函數聲明foo被預解析了,它可以在其自身代碼之前執行;而函數表達式foo_later則不能。要解決這個問題,我們先要弄清楚JavaScript解析器的工作機制。

變量提升(hoist)

JavaScript解析器會在自身作用域內將變量和函數聲明提前(hoist),也就是說,上面的例子其實被解析器理解解析成了以下形式:

function foo(){ console.log('函數聲明'); }  // 函數聲明全部被提前var foo_later;   // 函數表達式(變量聲明)僅將變量提前,賦值操作沒有被提前foo();       foo_later();   foo_later = function(){ console.log('函數表達式'); }

這樣也就可以解釋,為什么在函數表達式之前調用函數,會返回錯誤了,因為它還沒有被賦值,只是一個未定義變量,當然無法被執行。

同樣的,我們也可以試著猜測下面這段代碼的輸出結果:

console.log(declaredLater);  var declaredLater = "Now it's defined!";console.log(declaredLater);  

該段代碼可以被解析成一下形式:

 

var declaredLater;     console.log(declaredLater);  // undefineddeclaredLater = "Now it's defined!";console.log(declaredLater);  // Now it's defined!

 變量聲明被提到最前(所以不會報出變量不存在的錯誤),但賦值沒有被提前,所以第一次的輸出結果是undefined。

需要注意的是

由于函數聲明會被預解析,所以不要使用此種方法來聲明不同函數。嘗試猜想下面例子的輸出結果:

if(true){ function aaa(){  alert('1'); } }else{ function aaa(){  alert('2'); }}aaa();

與我們預想的不同,該段代碼彈出的是“2”.這是因為兩個函數聲明在if語句被執行之前就被預解析了,所以if語句根本沒有用,調用aaa()的時候直接執行了下面的函數。

總結

通過上面的講解可以總結如下:

•變量的聲明被提前到作用域頂部,賦值保留在原地

•函數聲明整個“被提前”

•函數作為值賦給變量時只有變量“被提前”了,函數沒有“被提前”

通過練習上面的實例自己多感受一下。另外,作為最佳實踐:變量聲明一定要放在作用域/函數的最上方(JavaScript 只有函數作用域!)。

以上這篇全面了解函數聲明與函數表達式、變量提升就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 99精品视频在线观看免费播放 | 久久av免费 | 色七七亚洲 | www.xxx视频| av免费在线免费观看 | 黄色片在线免费播放 | 欧美日韩成人一区二区 | 国产资源在线观看 | 毛片大全 | 日韩电影一区二区 | 蜜桃视频最新网址 | 在线视频a | 欧美一级爱爱 | 欧美成人精品一区二区三区 | 欧美国产成人在线 | 国产精品久久久毛片 | 国产一级一区二区三区 | 国产羞羞视频免费在线观看 | 中文字幕精品一二三四五六七八 | 久久经典国产视频 | 美女91视频 | 毛片电影网址 | 国产亚洲欧美一区久久久在 | 国产精品视频久久久 | 男女无套免费视频 | 九九热视频在线免费观看 | 日韩色视频在线观看 | 久久久久久亚洲综合影院红桃 | 久久久一区二区精品 | 国产超碰人人爽人人做人人爱 | 欧美精选一区二区 | 国产日韩在线视频 | 99久久电影 | 99亚洲伊人久久精品影院红桃 | 国产69精品久久99不卡免费版 | 日本网站一区二区三区 | 久久第四色 | av在线免费观看播放 | 亚洲欧美国产精品va在线观看 | 免费观看又色又爽又黄的崩锅 | 国产成人精品午夜视频' |