国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

lentrue / 913人閱讀

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

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

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

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

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

(2)分類

全局作用域

函數(shù)作用域

ES6中新增了塊級作用域

(3)作用

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

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

(1)區(qū)別1

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

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

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

(2)區(qū)別2

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

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

(3)聯(lián)系

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

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

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

三、作用域鏈

(1)理解

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

查找變量時就是沿著作用域鏈來查找的。

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

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

2)在上一級作用域的執(zhí)行上下文中查找對應的屬性, 如果有直接返回, 否則進入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()的作用域中沒有找到屬性x,則會去fn()的上一級作用域也就是全局作用域中找,找到x=10,因此打印10.

面試題2

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

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

上面第一個會正常打印出fn()

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

所以相當于window調(diào)用function(){console.log(window.fn2)},而window中沒有fn2屬性,所以會報錯。

將代碼改變:

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

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


obj.fn2()調(diào)用時this的指向為obj,所以相當于function(){console.log(obj.fn2)}obj中有fn2屬性,所以能成功執(zhí)行。

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

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/105077.html

相關文章

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

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

    galaxy_robot 評論0 收藏0
  • 進擊JavaScript之(二)詞法作用域與作用域鏈

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

    denson 評論0 收藏0
  • Javascript】深入理解this作用域問題以及new/let/var/const對this作

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

    snowLu 評論0 收藏0
  • Javascript重溫OOP之作用域與閉包

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

    JessYanCoding 評論0 收藏0
  • 深入理解 JavaScript, 從作用域與作用域鏈開始

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

    frontoldman 評論0 收藏0

發(fā)表評論

0條評論

lentrue

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<