最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

扒一扒JavaScript 預(yù)解釋

 更新時間: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?讓我們再看下面這段代碼執(zhí)行的結(jié)果:

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

alert(n);
n = 10;

運(yùn)行報如下錯誤:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

其實它倆的區(qū)別就是帶var關(guān)鍵字預(yù)解釋時只預(yù)解釋聲明部分(因為它本身不具備定義的能力),而帶function關(guān)鍵字在預(yù)解釋時聲明和定義同時被預(yù)解釋。這時我們再回頭分析下第一段代碼,分析如下:

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

為何說它無節(jié)操,請看下面的代碼(火狐除外):

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

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

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

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

這個地方因為相對比較繞而且不太好理解,所以加了一個星號,請看如下代碼:

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

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

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

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

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

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

代碼分析圖如下:

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

總結(jié):

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

相關(guān)文章

  • JS promise解決異步問題過程詳解

    JS promise解決異步問題過程詳解

    Promise是異步編程的一種解決方案,比傳統(tǒng)的解決方案——回調(diào)函數(shù)和事件——更合理和更強(qiáng)大。簡單說就是一個容器,里面保存著某個未來才會結(jié)束的事件(通常是一個異步操作)的結(jié)果。從語法上說,Promise是一個對象,從它可以獲取異步操作的消息
    2023-04-04
  • JavaScript中數(shù)組嵌套對象排序方法的示例詳解

    JavaScript中數(shù)組嵌套對象排序方法的示例詳解

    在?JavaScript?中,可以使用?sort()?方法對包含嵌套對象的數(shù)組進(jìn)行排序,本文將通過三個簡單的示例為大家進(jìn)行簡單的介紹,需要的可以參考下
    2024-03-03
  • js出生日期 年月日級聯(lián)菜單示例代碼

    js出生日期 年月日級聯(lián)菜單示例代碼

    本篇文章主要介紹了js出生日期 年月日級聯(lián)菜單的示例代碼。需要的朋友可以過來參考下,希望對大家有所幫助
    2014-01-01
  • JavaScript去掉空格的方法集合

    JavaScript去掉空格的方法集合

    JavaScript去掉空格的方法集合,腳本之家以前發(fā)布過很多的去除空格的代碼,這個更多更全面。
    2010-12-12
  • js簡單設(shè)置與使用cookie的方法

    js簡單設(shè)置與使用cookie的方法

    這篇文章主要介紹了js簡單設(shè)置與使用cookie的方法,以簡單實例形式分析了JavaScript設(shè)置與調(diào)用cookie的方法,需要的朋友可以參考下
    2016-01-01
  • 基于JS實現(xiàn)發(fā)送驗證碼的計時器效果

    基于JS實現(xiàn)發(fā)送驗證碼的計時器效果

    這篇文章主要為大家詳細(xì)介紹了如何基于JS實現(xiàn)一個發(fā)送驗證碼的計時器效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴快跟隨小編一起學(xué)習(xí)一下吧
    2023-11-11
  • JS將時間秒轉(zhuǎn)換成天小時分鐘秒的字符串

    JS將時間秒轉(zhuǎn)換成天小時分鐘秒的字符串

    最近小編接到這樣的項目需求,接口返回的數(shù)據(jù)中時間單位為秒,但前端顯示的時候需要更人性化的帶有單位(天,小時,分鐘,秒)的字符串;下面小編給大家?guī)韺嵗a,感興趣的朋友跟隨小編一起看看吧
    2019-07-07
  • javascript實現(xiàn)輸出指定行數(shù)正方形圖案的方法

    javascript實現(xiàn)輸出指定行數(shù)正方形圖案的方法

    這篇文章主要介紹了javascript實現(xiàn)輸出指定行數(shù)正方形圖案的方法,可實現(xiàn)javascript獲取用戶輸入及根據(jù)輸入?yún)?shù)打印圖形的功能,需要的朋友可以參考下
    2015-08-08
  • javascript深拷貝的原理與實現(xiàn)方法分析

    javascript深拷貝的原理與實現(xiàn)方法分析

    這篇文章主要介紹了javascript深拷貝的原理與實現(xiàn)方法,簡單分析了值傳遞和引用傳遞的原理與實現(xiàn)方法,并結(jié)合實例形式給出了深拷貝的具體實現(xiàn)技巧,需要的朋友可以參考下
    2017-04-04
  • JSDoc 介紹使用規(guī)范JsDoc的使用介紹

    JSDoc 介紹使用規(guī)范JsDoc的使用介紹

    JsDoc Toolkit 是一個把js描述格式化成文檔的工具。開發(fā)者只需按JsDoc的規(guī)范寫好注釋就可以很方便導(dǎo)出文檔。它是google 推薦的 JsDoc生成工具。
    2011-02-02

最新評論

江津市| 柳河县| 麻城市| 壶关县| 惠来县| 申扎县| 宝坻区| 甘孜县| 宁国市| 略阳县| 视频| 蒲江县| 平凉市| 民县| 东平县| 嘉义市| 临泉县| 雅安市| 什邡市| 琼海市| 弥渡县| 阿合奇县| 广昌县| 新营市| 三河市| 谢通门县| 长宁区| 沧源| 常德市| 峡江县| 循化| 应用必备| 文山县| 临邑县| 周宁县| 邯郸县| 华容县| 昔阳县| 内黄县| 奎屯市| 建阳市|