欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

扒一扒JavaScript 預(yù)解釋

 更新時(shí)間:2015年01月28日 15:48:46   投稿:hebedich  
這篇文章主要介紹了JavaScript 預(yù)解釋,包含帶var關(guān)鍵字預(yù)解釋、帶function關(guān)鍵字預(yù)解釋,需要的朋友可以參考下

帶var關(guān)鍵字預(yù)解釋

讓我們先看下這段代碼執(zhí)行的結(jié)果:

復(fù)制代碼 代碼如下:

alert(n);//彈出undefined
var n = 10;

彈出的結(jié)果是undefined,為何不是10?讓我們?cè)倏聪旅孢@段代碼執(zhí)行的結(jié)果:

復(fù)制代碼 代碼如下:

alert(n);
n = 10;

運(yùn)行報(bào)如下錯(cuò)誤:

為何這次會(huì)報(bào)錯(cuò),原因是代碼在運(yùn)行的時(shí)候,沒(méi)有聲明這個(gè)變量n;通過(guò)這兩段代碼的比較,我們發(fā)現(xiàn)帶var關(guān)鍵字和不帶var關(guān)鍵字聲明的變量是有區(qū)別的,帶var聲明的變量在代碼執(zhí)行之前,似乎瀏覽器已經(jīng)給了它們一個(gè)初始值undefined,因此我們將代碼執(zhí)行前,瀏覽器引擎自動(dòng)掃描帶var關(guān)鍵字和帶function關(guān)鍵字(后面會(huì)提到)聲明的變量和定義的函數(shù)的這個(gè)過(guò)程稱為預(yù)解釋。

帶function關(guān)鍵字預(yù)解釋

讓我們看下如下代碼執(zhí)行的結(jié)果:

復(fù)制代碼 代碼如下:

fn();//彈出hello
function fn(){
    alert('hello');
}

執(zhí)行結(jié)果彈出hello,fn能夠正常執(zhí)行,原因是在代碼執(zhí)行前fn被預(yù)解釋了,在預(yù)解釋時(shí)已經(jīng)將fn定義(defined)了,我們又有疑問(wèn)了,為何第一段代碼執(zhí)行結(jié)果不彈出10,而是undefined,再次引入了另一個(gè)概念JavaScript中的聲明和定義。

JavaScript中的聲明(declare)和定義(defined)

我們通常用var關(guān)鍵來(lái)聲明變量,用function關(guān)鍵字來(lái)定義函數(shù),只不過(guò)function關(guān)鍵字聲明和定義函數(shù)是同時(shí)執(zhí)行的,而var它只能聲明變量,并不具備定義的功能。

如下是用var關(guān)鍵字聲明的變量:

復(fù)制代碼 代碼如下:

var n;//聲明了一個(gè)變量n
var m = 10;//聲明了一個(gè)變量m,并且將10賦值給它

如下是用function關(guān)鍵字定義的函數(shù):

復(fù)制代碼 代碼如下:

//定義了一個(gè)函數(shù)fn
function fn(){
    alert('hello');
}

帶var關(guān)鍵字和帶function關(guān)鍵字預(yù)解釋的區(qū)別

其實(shí)它倆的區(qū)別就是帶var關(guān)鍵字預(yù)解釋時(shí)只預(yù)解釋聲明部分(因?yàn)樗旧聿痪邆涠x的能力),而帶function關(guān)鍵字在預(yù)解釋時(shí)聲明和定義同時(shí)被預(yù)解釋。這時(shí)我們?cè)倩仡^分析下第一段代碼,分析如下:

無(wú)節(jié)操(坑爹)的預(yù)解釋

為何說(shuō)它無(wú)節(jié)操,請(qǐng)看下面的代碼(火狐除外):

復(fù)制代碼 代碼如下:

alert(n);
fn();
if(false) {
    var n = 10;
    function fn(){
        alert('hello');
    }
}

第一行代碼執(zhí)行會(huì)彈出undefined,第二行代碼執(zhí)行會(huì)彈出hello;是因?yàn)閚和fn在代碼執(zhí)行前被預(yù)解釋了,即使if條件判斷為false,執(zhí)著的瀏覽器引擎也會(huì)將帶var關(guān)鍵字聲明的變量n和帶function關(guān)鍵定義的fn掃描到。

*預(yù)解釋忽略重新聲明,不忽略重新定義

這個(gè)地方因?yàn)橄鄬?duì)比較繞而且不太好理解,所以加了一個(gè)星號(hào),請(qǐng)看如下代碼:

復(fù)制代碼 代碼如下:

alert(n);
var n = 10;
var n = 9;
var n;
alert(n);

這段代碼執(zhí)行結(jié)果是什么,我們來(lái)分析一下:

繼續(xù)上代碼,請(qǐng)分析如下執(zhí)行結(jié)果:

復(fù)制代碼 代碼如下:

fn();
function fn() {
    alert('1');
}
fn();
function fn() {
    alert('2');
}
fn();

代碼分析圖如下:

帶function定義的函數(shù)預(yù)解釋分析

總結(jié):

本篇博文用了大篇幅代碼和截圖對(duì)JavaScript中預(yù)解釋作了概述,縱觀各種書(shū)籍對(duì)預(yù)解釋的描述甚少,其實(shí)平時(shí)在工作中使用的場(chǎng)景也并不多,遺憾的是預(yù)解釋是各大公司面試題必考。在剛開(kāi)始接觸它的時(shí)候,感覺(jué)它總是不按照常理寫代碼,但是有些時(shí)候卻能夠正常運(yùn)行并不會(huì)報(bào)錯(cuò),當(dāng)然這也增加了我們對(duì)它神秘感的探索,也讓我們進(jìn)一步了解瀏覽器引擎是怎么解釋執(zhí)行我們的代碼。特此在后面的博文中我會(huì)拿幾道經(jīng)典的案例來(lái)綜合分析它,再次感謝大家的支持!

相關(guān)文章

  • 一文了解ES5和ES6的區(qū)別

    一文了解ES5和ES6的區(qū)別

    ES6是JavaScript語(yǔ)言的主要增強(qiáng),允許我們編寫程序,ES6適用于復(fù)雜的應(yīng)用程序,盡管ES5和ES6在本質(zhì)上有一些相似之處,但它們之間也有許多不同之處,下面這篇文章主要給大家介紹了關(guān)于ES5和ES6區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • JavaScript 函數(shù)節(jié)流詳解及方法總結(jié)

    JavaScript 函數(shù)節(jié)流詳解及方法總結(jié)

    這篇文章主要介紹了JavaScript 函數(shù)節(jié)流詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • JS實(shí)現(xiàn)漂亮的淡藍(lán)色滑動(dòng)門效果代碼

    JS實(shí)現(xiàn)漂亮的淡藍(lán)色滑動(dòng)門效果代碼

    這篇文章主要介紹了JS實(shí)現(xiàn)漂亮的淡藍(lán)色滑動(dòng)門效果代碼,涉及JavaScript通過(guò)自定義函數(shù)遍歷頁(yè)面元素及動(dòng)態(tài)設(shè)置元素屬性的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-09-09
  • JavaScript中的函數(shù)重載深入理解

    JavaScript中的函數(shù)重載深入理解

    將函數(shù)名作為指向函數(shù)的指針,有助于理解為什么ECMAScript中沒(méi)有函數(shù)重載的概念,需要的朋友可以參考下
    2014-08-08
  • layui--select使用以及下拉框?qū)崿F(xiàn)鍵盤選擇的例子

    layui--select使用以及下拉框?qū)崿F(xiàn)鍵盤選擇的例子

    今天小編就為大家分享一篇layui--select使用以及下拉框?qū)崿F(xiàn)鍵盤選擇的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-09-09
  • javascript實(shí)現(xiàn)倒計(jì)時(shí)關(guān)閉廣告

    javascript實(shí)現(xiàn)倒計(jì)時(shí)關(guān)閉廣告

    這篇文章主要為大家詳細(xì)介紹了javascript實(shí)現(xiàn)倒計(jì)時(shí)關(guān)閉廣告,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-02-02
  • js禁止回車提交表單的示例代碼

    js禁止回車提交表單的示例代碼

    本篇文章主要是對(duì)js禁止回車提交表單的示例代碼進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2013-12-12
  • 前臺(tái)js調(diào)用后臺(tái)方法示例

    前臺(tái)js調(diào)用后臺(tái)方法示例

    本文為大家介紹下前臺(tái)js調(diào)用后臺(tái)方法,下面有個(gè)不錯(cuò)的示例,喜歡的朋友可以參考下
    2013-12-12
  • 簡(jiǎn)單實(shí)現(xiàn)js拖拽效果

    簡(jiǎn)單實(shí)現(xiàn)js拖拽效果

    這篇文章主要教大家如何簡(jiǎn)單實(shí)現(xiàn)js拖拽效果,很詳細(xì)的js拖拽效果實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • 原生js實(shí)現(xiàn)照片墻效果

    原生js實(shí)現(xiàn)照片墻效果

    這篇文章主要介紹了原生js實(shí)現(xiàn)照片墻效果,幫助大家更好的利用js制作特效,感興趣的朋友可以了解下
    2020-10-10

最新評(píng)論