JavaScript之詞法作用域

作用域

在JS中作用域是一個(gè)相當(dāng)重要的概念,我們一般把作用域分為兩類:即靜態(tài)作用域和動(dòng)態(tài)作用域,JS采用的就是靜態(tài)作用域(詞法作用域)

對(duì)于靜態(tài)作用域有一個(gè)相當(dāng)重要的點(diǎn)是: 函數(shù)的作用域在函數(shù)定義的時(shí)候就決定了, 這個(gè)相當(dāng)重要哦,接下來我們直接看一個(gè)例子:

var value = 100;

function foo() {
    console.log(value);
}

function bar() {
    var value = 1;
    foo();
}

bar();

我們先看下在控制臺(tái)的執(zhí)行結(jié)果 =>


default

接下來相必有些人這里有些疑問了,為什么這里的console.log的結(jié)果是100而不是1哈,其實(shí)是這樣的
當(dāng)我們調(diào)用bar()的時(shí)候會(huì)在函數(shù)內(nèi)部調(diào)用foo()函數(shù),但是還記得我們上面說了函數(shù)的作用域在函數(shù)定義的時(shí)候就決定了。
也就是說當(dāng)我們?cè)诙xfoo這個(gè)函數(shù)的時(shí)候,根據(jù)作用域鏈的查找: foo內(nèi)部沒有申明value變量,我們就到全局查找到value的值是100(這個(gè)是在函數(shù)定義的時(shí)候已經(jīng)被決定了),當(dāng)我們調(diào)用foo()的時(shí)候,打印的結(jié)果自然就是100。

假設(shè)JS這門語言在設(shè)計(jì)的時(shí)候采用的是動(dòng)態(tài)作用域(函數(shù)的作用域是在函數(shù)調(diào)用的時(shí)候才決定的),那么這里的執(zhí)行結(jié)果就是1了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 首先要弄清楚什么作用域? 作用域其實(shí)就是一套規(guī)則,用來存儲(chǔ)和查找程序中的變量。這套規(guī)則可以管理引擎在...
    弦五閱讀 331評(píng)論 0 1
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,695評(píng)論 19 139
  • # 作用域 ## 什么是作用域(Scope)? 作用域產(chǎn)生于程序源代碼中定義變量的區(qū)域,在程序編碼階段就確定了。j...
    火花_cfcc閱讀 393評(píng)論 0 0
  • 考試?yán)^續(xù),今天經(jīng)歷了第二考場(chǎng)和第三考場(chǎng)。第二考場(chǎng)是在工作交接的會(huì)議上,我進(jìn)行了一個(gè)簡(jiǎn)短的發(fā)言,這個(gè)發(fā)言是事先準(zhǔn)備好...
    新自由閱讀 159評(píng)論 0 0
  • IT之家1月9日消息 在英特爾的CES會(huì)展上,世界上第一架純電動(dòng)兩座直升機(jī)Volocopter亮相。準(zhǔn)確的說,Vo...
    泥巴創(chuàng)客空間_f6db閱讀 115評(píng)論 0 0

友情鏈接更多精彩內(nèi)容