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

談一談js中的執(zhí)行環(huán)境及作用域

 更新時(shí)間:2016年03月30日 17:12:08   作者:沫沫的沫沫  
這篇文章主要和大家一起談一談js中的執(zhí)行環(huán)境及作用域,本文依據(jù)面試過(guò)程中遇到的問(wèn)題進(jìn)行探討,感興趣的小伙伴們可以參考一下

最近在面試時(shí)被問(wèn)到了對(duì)作用域鏈的理解,感覺(jué)當(dāng)時(shí)回答的不是很好,今天就來(lái)說(shuō)說(shuō)js中的作用域鏈吧。

首先來(lái)說(shuō)說(shuō)js中的執(zhí)行環(huán)境,所謂執(zhí)行環(huán)境(有時(shí)也稱(chēng)環(huán)境)它是JavaScript中最為重要的一個(gè)概念。執(zhí)行環(huán)境定義了變量或函數(shù)有權(quán)訪問(wèn)的其他數(shù)據(jù) ,決定了它們各自的行為。而每個(gè)執(zhí)行環(huán)境都有一個(gè)與之相關(guān)的變量對(duì)象,環(huán)境中定義的所有變量和函數(shù)都保存在這個(gè)對(duì)象中。

理解了執(zhí)行環(huán)境,現(xiàn)在就看看什么是作用域鏈吧。每個(gè)函數(shù)都有自己的執(zhí)行環(huán)境,當(dāng)代碼在執(zhí)行環(huán)境中執(zhí)行時(shí),就會(huì)創(chuàng)建變量對(duì)象的作用域鏈。作用域鏈保證了對(duì)執(zhí)行環(huán)境有權(quán)訪問(wèn)所有變量和函數(shù)的有序訪問(wèn)。作用域鏈的前端,始終都是當(dāng)前執(zhí)行的代碼所在的環(huán)境的變量對(duì)象,如果環(huán)境是一個(gè)函數(shù),那么它的變量對(duì)象就是該函數(shù)的活動(dòng)對(duì)象。作用域鏈的下一個(gè)變量對(duì)象來(lái)自包含(外部)環(huán)境,再下一個(gè)變量對(duì)象來(lái)自下一個(gè)包含環(huán)境。這樣一直延續(xù)到全局執(zhí)行環(huán)境,記住,全局執(zhí)行環(huán)境的變量對(duì)象永遠(yuǎn)是作用域中的最后一個(gè)對(duì)象。

請(qǐng)看下面的例子:

var scope="global";
function foo(){
  console.log(scope);
}  
foo();

在這個(gè)例子中,函數(shù)foo()的作用域鏈包含了兩個(gè)對(duì)象,一個(gè)是它自身對(duì)象,另一個(gè)是全局環(huán)境中的變量對(duì)象。因?yàn)槲覀兛梢栽谶@個(gè)作用域鏈中找的scope,所以可以在函數(shù)內(nèi)部里訪問(wèn)到它。

在看一個(gè)例子:

var color = "blue";
function changeColor(){
  var anoterColor = "red";
  function swapColor(){
    var tempColor = anoterColor;
    anoterColor = color;
    color = tempColor;
    console.log(color);
  }
  swapColor();
}
changeColor();

在這個(gè)例子中,有三個(gè)執(zhí)行環(huán)境:全局環(huán)境、changeColor()的局部環(huán)境和swapColor()局部環(huán)境。我們來(lái)看看這個(gè)例子的作用域鏈?zhǔn)窃鯓拥陌伞?/p>

圖中的矩形表示特定的執(zhí)行環(huán)境。我們可以看到變量tempColor只能在swapColor()環(huán)境中訪問(wèn)到,而在changeColor()的局部環(huán)境還是全局環(huán)境中都無(wú)法訪問(wèn)到它。因此我們可以得到一個(gè)結(jié)論:內(nèi)部的環(huán)境可以通過(guò)作用域鏈訪問(wèn)所有的外部環(huán)境,但外部的環(huán)境無(wú)法訪問(wèn)內(nèi)部的環(huán)境中的任何變量和函數(shù)。每個(gè)環(huán)境都可以向上搜索作用域鏈,以查詢變量和函數(shù)名;但是任何環(huán)境都不能通過(guò)向下搜索作用域而進(jìn)入另一個(gè)執(zhí)行環(huán)境。

作用域中我還想說(shuō)說(shuō)的是:js沒(méi)有塊級(jí)作用域

為什么說(shuō)js沒(méi)有塊級(jí)作用域呢?我們來(lái)看下面的代碼:

if(true){
 var color = "blue"; 
}
alert(color);  //"blue"
 

咦,為什么color在if語(yǔ)句執(zhí)行完畢后被銷(xiāo)毀呢?哈哈,如果在C、C++或Java中,color確實(shí)會(huì)被銷(xiāo)毀,但在JavaScript中,if語(yǔ)句中的變量聲明會(huì)將變量添加到當(dāng)前的執(zhí)行環(huán)境中(在這里是全局環(huán)境)中。特別地,在for語(yǔ)句時(shí)要牢記這一差異,例如:

for(var i = 0;i< 10; i++){
doSomething(i);
}
alert(i);    //10

記住:在JavaScript中,由for語(yǔ)句創(chuàng)建的變量i即使在for循環(huán)執(zhí)行結(jié)束之后,也依然會(huì)存在于循環(huán)外部的執(zhí)行環(huán)境中。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。

相關(guān)文章

  • js實(shí)現(xiàn)簡(jiǎn)單的日歷顯示效果函數(shù)示例

    js實(shí)現(xiàn)簡(jiǎn)單的日歷顯示效果函數(shù)示例

    這篇文章主要介紹了js實(shí)現(xiàn)簡(jiǎn)單的日歷顯示效果函數(shù),結(jié)合完整實(shí)例形式分析了JavaScript實(shí)現(xiàn)的日歷功能相關(guān)原理與具體操作技巧,需要的朋友可以參考下
    2019-11-11
  • js獲取判斷上傳文件后綴名的示例代碼

    js獲取判斷上傳文件后綴名的示例代碼

    本篇文章主要是對(duì)js獲取判斷上傳文件后綴名的示例代碼進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2014-02-02
  • 讓innerText在firefox火狐和IE瀏覽器都能用的寫(xiě)法

    讓innerText在firefox火狐和IE瀏覽器都能用的寫(xiě)法

    下面的代碼主要是用來(lái)解決firefox瀏覽器不支持innerText的問(wèn)題,需要的朋友可以參考下。
    2011-05-05
  • js如何判斷用戶是否是用微信瀏覽器

    js如何判斷用戶是否是用微信瀏覽器

    微信內(nèi)置瀏覽器屏蔽了下載鏈接,如果用戶是用微信內(nèi)置瀏覽器打開(kāi)的,則提示用戶換一個(gè)瀏覽器打開(kāi)頁(yè)面,那么該如何判斷用戶是否是用微信瀏覽器呢
    2014-06-06
  • 微信小程序日歷組件使用方法詳解

    微信小程序日歷組件使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了微信小程序日歷組件的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • 微信小程序?qū)崿F(xiàn)簡(jiǎn)單表格

    微信小程序?qū)崿F(xiàn)簡(jiǎn)單表格

    這篇文章主要介紹了微信小程序?qū)崿F(xiàn)簡(jiǎn)單表格,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • 詳解Bootstrap四種圖片樣式

    詳解Bootstrap四種圖片樣式

    本文給大家介紹Bootstrap 對(duì)圖片的支持,Bootstrap提供了四個(gè)可對(duì)圖片應(yīng)用簡(jiǎn)單樣式的class,對(duì)Bootstrap四種圖片class相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧
    2016-01-01
  • 提高Web性能的前端優(yōu)化技巧總結(jié)

    提高Web性能的前端優(yōu)化技巧總結(jié)

    這篇文章講述可以幫助 改善優(yōu)化前端的技術(shù),非常有用。主要內(nèi)容有清理代碼、壓縮圖片、壓縮外部資源、使用CDN,以及一些其它方法。這些方法會(huì)為你的網(wǎng)站帶顯著的速度提升和整體性能提升。下面跟著小編一起來(lái)看下吧
    2017-02-02
  • javascript 像素拼圖實(shí)現(xiàn)代碼

    javascript 像素拼圖實(shí)現(xiàn)代碼

    非常不錯(cuò)的像素拼圖效果
    2009-04-04
  • uniapp自定義彈框的方法

    uniapp自定義彈框的方法

    這篇文章主要為大家詳細(xì)介紹了uniapp自定義彈框的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08

最新評(píng)論

天镇县| 芜湖市| 绿春县| 洛扎县| 湾仔区| 益阳市| 玛沁县| 阿拉善左旗| 千阳县| 赤水市| 江北区| 甘泉县| 绥中县| 西平县| 大安市| 雷山县| 雷州市| 蒲城县| 清水河县| 胶南市| 涿鹿县| 蕉岭县| 钟山县| 麟游县| 盈江县| 漳浦县| 麻栗坡县| 开鲁县| 山丹县| 玉溪市| 正阳县| 德惠市| 合作市| 拜城县| 德保县| 安国市| 扎兰屯市| 保靖县| 六盘水市| 乌海市| 呼伦贝尔市|