成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

深入理解JavaScript (4) —— 從自由變量到作用域鏈

LittleLiByte / 3594人閱讀

摘要:自由變量如果在某個(gè)作用域中使用了變量,而變量并未在該作用域中聲明在其它作用域中聲明了,則該變量即為自由變量。換言之,此處最終執(zhí)行的函數(shù)是,而自由變量是,因此要到創(chuàng)建的作用域中去找的值。

自由變量:如果在某個(gè)作用域中使用了變量“a”,而變量“a”并未在該作用域中聲明(在其它作用域中聲明了),則該變量“a”即為自由變量。

var a = 1;
function fn() {
    var b = 2;
    console.log( a + b);    //變量a即為一個(gè)自由變量
}

上述代碼中,取b的值就直接可以在fn作用域中取,因?yàn)閎就是在這里定義的。而取x的值時(shí),就需要到另一個(gè)作用域中取。到哪個(gè)作用域中取呢?

有人說(shuō),要到父作用域中取,其實(shí)有時(shí)候這種解釋會(huì)產(chǎn)生歧義。例如:

var a = 1;
function fn() {
    console.log(a);
}

function show(f) {
    var a = 2;
    (function () {
        f();    //1,而不是2
    })();
}

show(fn);

上述代碼的執(zhí)行結(jié)果說(shuō)明“要到父作用域中取”這句話并不準(zhǔn)確,更貼切的說(shuō)法是:要到創(chuàng)建這個(gè)被執(zhí)行函數(shù)(此處為fn)的那個(gè)作用域(此處為全局作用域,因?yàn)閒n是在全局作用域中創(chuàng)建的)中取值 是“創(chuàng)建”,而不是“調(diào)用”,切記切記——其實(shí)這就是所謂的“靜態(tài)作用域”。換言之,此處最終執(zhí)行的函數(shù)是fn,而自由變量是a,因此要到創(chuàng)建fn的作用域中去找a的值。

存在這樣的可能,在創(chuàng)建fn的作用域中并未找到自由變量a,此時(shí)怎么辦呢?那就再到該作用域的上一級(jí)作用域中尋找,如若還沒(méi)有,就繼續(xù)向上找,直至找到全局作用域,若依然未找到,就會(huì)報(bào)“a is not defined!”。能夠沿著作用域一級(jí)級(jí)向上尋找的機(jī)制就稱為“作用域鏈”。

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

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

相關(guān)文章

  • 【進(jìn)階2-2期】JavaScript深入作用域鏈理解閉包

    摘要:使用上一篇文章的例子來(lái)說(shuō)明下自由變量進(jìn)階期深入淺出圖解作用域鏈和閉包訪問(wèn)外部的今天是今天是其中既不是參數(shù),也不是局部變量,所以是自由變量。 (關(guān)注福利,關(guān)注本公眾號(hào)回復(fù)[資料]領(lǐng)取優(yōu)質(zhì)前端視頻,包括Vue、React、Node源碼和實(shí)戰(zhàn)、面試指導(dǎo)) 本周正式開始前端進(jìn)階的第二期,本周的主題是作用域閉包,今天是第7天。 本計(jì)劃一共28期,每期重點(diǎn)攻克一個(gè)面試重難點(diǎn),如果你還不了解本進(jìn)階計(jì)...

    simpleapples 評(píng)論0 收藏0
  • javascript深入理解-作用域鏈理解閉包

    摘要:一概要紅寶書對(duì)于閉包的定義閉包就是有權(quán)訪問(wèn)另外一個(gè)函數(shù)作用域中變量的函數(shù)。湯姆大叔在關(guān)于閉包對(duì)的文章的定義。解決辦法改成閉包,方法就是返回一個(gè)函數(shù),并且訪問(wèn)變量循環(huán)結(jié)束后的全局執(zhí)行上下文沒(méi)有變化。 一、概要 紅寶書(P178)對(duì)于閉包的定義:閉包就是有權(quán)訪問(wèn)另外一個(gè)函數(shù)作用域中變量的函數(shù)。 MDN,對(duì)于閉包的定義:閉包就是指能夠訪問(wèn)自由變量的函數(shù)。 那么什么是自由變量?自由變量就是在函...

    Scholer 評(píng)論0 收藏0
  • JavaScript中的閉包

    摘要:閉包引起的內(nèi)存泄漏總結(jié)從理論的角度將由于作用域鏈的特性中所有函數(shù)都是閉包但是從應(yīng)用的角度來(lái)說(shuō)只有當(dāng)函數(shù)以返回值返回或者當(dāng)函數(shù)以參數(shù)形式使用或者當(dāng)函數(shù)中自由變量在函數(shù)外被引用時(shí)才能成為明確意義上的閉包。 文章同步到github js的閉包概念幾乎是任何面試官都會(huì)問(wèn)的問(wèn)題,最近把閉包這塊的概念梳理了一下,記錄成以下文章。 什么是閉包 我先列出一些官方及經(jīng)典書籍等書中給出的概念,這些概念雖然...

    HmyBmny 評(píng)論0 收藏0
  • 深入理解JavaScript作用域和作用域鏈

    前言 JavaScript中有一個(gè)被稱為作用域(Scope)的特性。雖然對(duì)于許多新手開發(fā)者來(lái)說(shuō),作用域的概念并不是很容易理解,本文我會(huì)盡我所能用最簡(jiǎn)單的方式來(lái)解釋作用域和作用域鏈,希望大家有所收獲! 想閱讀更多優(yōu)質(zhì)文章請(qǐng)猛戳GitHub博客 作用域(Scope) 1.什么是作用域 作用域是在運(yùn)行時(shí)代碼中的某些特定部分中變量,函數(shù)和對(duì)象的可訪問(wèn)性。換句話說(shuō),作用域決定了代碼區(qū)塊中變量和其他資源的可見(jiàn)...

    baiy 評(píng)論0 收藏0
  • 深入理解JavaScript作用域和作用域鏈

    前言 JavaScript中有一個(gè)被稱為作用域(Scope)的特性。雖然對(duì)于許多新手開發(fā)者來(lái)說(shuō),作用域的概念并不是很容易理解,本文我會(huì)盡我所能用最簡(jiǎn)單的方式來(lái)解釋作用域和作用域鏈,希望大家有所收獲! 想閱讀更多優(yōu)質(zhì)文章請(qǐng)猛戳GitHub博客 作用域(Scope) 1.什么是作用域 作用域是在運(yùn)行時(shí)代碼中的某些特定部分中變量,函數(shù)和對(duì)象的可訪問(wèn)性。換句話說(shuō),作用域決定了代碼區(qū)塊中變量和其他資源的可見(jiàn)...

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

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

0條評(píng)論

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