亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

【7】JavaScript 函數(shù)高級(jí)——作用域與作用域鏈

lentrue / 976人閱讀

摘要:函數(shù)高級(jí)作用域與作用域鏈一作用域作用域個(gè)數(shù)定義的函數(shù)個(gè)數(shù)全局作用域理解就是一塊地盤(pán)一個(gè)代碼段所在的區(qū)域。函數(shù)執(zhí)行上下文環(huán)境是在調(diào)用函數(shù)時(shí)函數(shù)體代碼執(zhí)行之前創(chuàng)建。

JavaScript函數(shù)高級(jí)——作用域與作用域鏈 一、作用域

作用域個(gè)數(shù) = n(定義的函數(shù)個(gè)數(shù)) + 1(全局作用域)
(1)理解

就是一塊"地盤(pán)", 一個(gè)代碼段所在的區(qū)域。

它是靜態(tài)的(相對(duì)于上下文對(duì)象), 在編寫(xiě)代碼時(shí)就確定了。

(2)分類(lèi)

全局作用域

函數(shù)作用域

ES6中新增了塊級(jí)作用域

(3)作用

隔離變量,不同作用域下同名變量不會(huì)有沖突。

二、作用域與執(zhí)行上下文

(1)區(qū)別1

全局作用域之外,每個(gè)函數(shù)都會(huì)創(chuàng)建自己的作用域,作用域在函數(shù)定義時(shí)就已經(jīng)確定了。而不是在函數(shù)調(diào)用時(shí)。

全局執(zhí)行上下文環(huán)境是在全局作用域確定之后, js代碼馬上執(zhí)行之前創(chuàng)建。

函數(shù)執(zhí)行上下文環(huán)境是在調(diào)用函數(shù)時(shí), 函數(shù)體代碼執(zhí)行之前創(chuàng)建。

(2)區(qū)別2

作用域是靜態(tài)的, 只要函數(shù)定義好了就一直存在, 且不會(huì)再變化。

上下文環(huán)境是動(dòng)態(tài)的, 調(diào)用函數(shù)時(shí)創(chuàng)建, 函數(shù)調(diào)用結(jié)束時(shí)上下文環(huán)境就會(huì)被釋放。

(3)聯(lián)系

上下文環(huán)境(對(duì)象)是從屬于所在的作用域。

全局上下文環(huán)境==>全局作用域

函數(shù)上下文環(huán)境==>對(duì)應(yīng)的函數(shù)作用域

三、作用域鏈

(1)理解

多個(gè)上下級(jí)關(guān)系的作用域形成的鏈, 它的方向是從下向上的(從內(nèi)到外)

查找變量時(shí)就是沿著作用域鏈來(lái)查找的。

(2)查找一個(gè)變量的查找規(guī)則

1)在當(dāng)前作用域下的執(zhí)行上下文中查找對(duì)應(yīng)的屬性, 如果有直接返回, 否則進(jìn)入2)。

2)在上一級(jí)作用域的執(zhí)行上下文中查找對(duì)應(yīng)的屬性, 如果有直接返回, 否則進(jìn)入3)。

3)再次執(zhí)行2)的相同操作, 直到全局作用域, 如果還找不到就拋出找不到的異常。

var a = 2;
function fn1() {
    var b = 3;
    function fn2() {
        var c = 4;
        console.log(c);
        console.log(b);
        console.log(a);
        console.log(d);
    }
    fn2();
}
fn1();

四、作用域_面試題

面試題1

var x = 10;
function fn() {
  console.log(x);
}
function show(f) {
  var x = 20;
  f();
}
show(fn); // 結(jié)果 10
// 由于fn()的作用域中沒(méi)有找到屬性x,則會(huì)去fn()的上一級(jí)作用域也就是全局作用域中找,找到x=10,因此打印10.

面試題2

var fn = function () {
  console.log(fn)
}
fn()

var obj = {
  fn2: function () {
    console.log(fn2)
  }
}
obj.fn2()

上面第一個(gè)會(huì)正常打印出fn()

第二個(gè),調(diào)用時(shí)是obj.fn2(),而obj.fn2() = function(){console.log(fn2)}

所以相當(dāng)于window調(diào)用function(){console.log(window.fn2)},而window中沒(méi)有fn2屬性,所以會(huì)報(bào)錯(cuò)。

將代碼改變:

var fn = function () {
  console.log(fn)
}
fn()

var obj = {
  fn2: function () {
    // console.log(fn2)
    console.log(this.fn2)
  }
}
obj.fn2()


obj.fn2()調(diào)用時(shí)this的指向?yàn)?b>obj,所以相當(dāng)于function(){console.log(obj.fn2)},obj中有fn2屬性,所以能成功執(zhí)行。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/105077.html

相關(guān)文章

  • 《你不知道的javascript》筆記_作用域與閉包

    摘要:建筑的頂層代表全局作用域。實(shí)際的塊級(jí)作用域遠(yuǎn)不止如此塊級(jí)作用域函數(shù)作用域早期盛行的立即執(zhí)行函數(shù)就是為了形成塊級(jí)作用域,不污染全局。這便是閉包的特點(diǎn)吧經(jīng)典面試題下面的代碼輸出內(nèi)容答案?jìng)€(gè)如何處理能夠輸出閉包方式方式下一篇你不知道的筆記 下一篇:《你不知道的javascript》筆記_this 寫(xiě)在前面 這一系列的筆記是在《javascript高級(jí)程序設(shè)計(jì)》讀書(shū)筆記系列的升華版本,旨在將零碎...

    galaxy_robot 評(píng)論0 收藏0
  • 進(jìn)擊JavaScript之(二)詞法作用域與作用域鏈

    摘要:一作用域域表示的就是范圍,即作用域,就是一個(gè)名字在什么地方可以使用,什么時(shí)候不能使用。概括的說(shuō)作用域就是一套設(shè)計(jì)良好的規(guī)則來(lái)存儲(chǔ)變量,并且之后可以方便地找到這些變量。 一、作用域 域表示的就是范圍,即作用域,就是一個(gè)名字在什么地方可以使用,什么時(shí)候不能使用。想了解更多關(guān)于作用域的問(wèn)題推薦閱讀《你不知道的JavaScript上卷》第一章(或第一部分),從編譯原理的角度說(shuō)明什么是作用域。概...

    denson 評(píng)論0 收藏0
  • Javascript】深入理解this作用域問(wèn)題以及new/let/var/const對(duì)this作

    摘要:理解作用域高級(jí)程序設(shè)計(jì)中有說(shuō)到對(duì)象是在運(yùn)行時(shí)基于函數(shù)的執(zhí)行環(huán)境綁定的在全局函數(shù)中,等于,而當(dāng)函數(shù)被作為某個(gè)對(duì)象調(diào)用時(shí),等于那個(gè)對(duì)象。指向與匿名函數(shù)沒(méi)有關(guān)系如果函數(shù)獨(dú)立調(diào)用,那么該函數(shù)內(nèi)部的,則指向。 理解this作用域 《javascript高級(jí)程序設(shè)計(jì)》中有說(shuō)到: this對(duì)象是在運(yùn)行時(shí)基于函數(shù)的執(zhí)行環(huán)境綁定的:在全局函數(shù)中,this等于window,而當(dāng)函數(shù)被作為某個(gè)對(duì)象調(diào)用時(shí),t...

    snowLu 評(píng)論0 收藏0
  • Javascript重溫OOP之作用域與閉包

    摘要:的變量作用域是基于其特有的作用域鏈的。需要注意的是,用創(chuàng)建的函數(shù),其作用域指向全局作用域。所以,有另一種說(shuō)法認(rèn)為閉包是由函數(shù)和與其相關(guān)的引用環(huán)境組合而成的實(shí)體。 作用域 定義 在編程語(yǔ)言中,作用域控制著變量與參數(shù)的可見(jiàn)性及生命周期,它能減少名稱(chēng)沖突,而且提供了自動(dòng)內(nèi)存管理 --javascript 語(yǔ)言精粹 我理解的是,一個(gè)變量、函數(shù)或者成員可以在代碼中訪問(wèn)到的范圍。 js的變量作...

    JessYanCoding 評(píng)論0 收藏0
  • 深入理解 JavaScript, 從作用域與作用域鏈開(kāi)始

    摘要:所以上面那段代碼鏈中最初應(yīng)該是之后之后所以最后的輸出結(jié)果是作用域鏈概念看了前面一個(gè)完整的函數(shù)執(zhí)行過(guò)程,讓我們來(lái)說(shuō)下作用域鏈的概念吧。而這一條形成的鏈就是中的作用域鏈。 showImg(https://segmentfault.com/img/bVbvayE?w=1280&h=545); 1. 什么是作用域 作用域是你的代碼在運(yùn)行時(shí),某些特定部分中的變量,函數(shù)和對(duì)象的可訪問(wèn)性。換句話說(shuō),...

    frontoldman 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<