摘要:作用域所謂作用域,就是變量或者是函數(shù)能作用的范圍。常見的經(jīng)典例子解決辦法作用域鏈變量隨著作用長輩函數(shù)一級一級往上搜索,直到找到為止,找不到就報錯,這個過程就是作用域鏈起的作用。
作用域
所謂作用域,就是變量或者是函數(shù)能作用的范圍。
那么JavaScript里有什么作用域呢?
1、全局作用域除了函數(shù)中定義的變量之外,都是全局作用域。
舉個栗子:
var a = 10; function bar(){ console.log(a); } bar();//10
以上的a就是全局變量,到處可以訪問a。
然鵝,
var a = 10; function bar(){ console.log(a); var a = 20; } bar();//undefined
什么鬼?undefined?
是的,你沒看錯。因為先搜索函數(shù)的變量看是否存在a,存在,又由于a被預(yù)解析(變量提升),提升的a綁定了這里的a作用域,所以結(jié)果就是undefined。
函數(shù)里用var聲明的變量。
舉個栗子:
var a = 10; function bar(){ var a = 20; console.log(a); } bar();//203、沒有塊級作用域(至ES5),ES6中有塊級作用域
ES6之前,除了函數(shù)之外的塊都不具備塊級作用域。
常見的經(jīng)典例子:
for(var i=0;i<4;i++){ setTimeout(function(){ console.log(i); },200); } //4 4 4 4
解決辦法:
for(var i=0;i<4;i++){ (function(j){ setTimeout(function(){ console.log(j); },200); })(i) } //0 1 2 3作用域鏈
變量隨著作用長輩函數(shù)一級一級往上搜索,直到找到為止,找不到就報錯,這個過程就是作用域鏈起的作用。
var num = 30; function f1(){ var num = 20; function f2(){ var num = 10; function f3(){ var num = 5; console.log(num); } f3(); } f2(); } f1();
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/94664.html
摘要:至此作用域鏈創(chuàng)建完畢。好了,通過深入理解作用域鏈,我們能跟好的理解的運行機制和閉包的原理。 前言 理解javascript中的作用域和作用域鏈對我們理解js這們語言。這次想深入的聊下關(guān)于js執(zhí)行的內(nèi)部機制,主要討論下,作用域,作用域鏈,閉包的概念。為了更好的理解這些東西,我模擬了當一個函數(shù)執(zhí)行時,js引擎做了哪些事情--那些我們看不見的動作。 關(guān)鍵詞: 執(zhí)行環(huán)境 作用域 作用域鏈 變...
摘要:開篇作用域是每種計算機語言最重要的基礎(chǔ)之一,因此要想深入的學習作用域和作用域鏈就是個繞不開的話題。這樣由多個執(zhí)行上下文的變量對象構(gòu)成的鏈表就叫做作用域鏈。這時候執(zhí)行上下文的作用域鏈,我們命名為至此,作用域鏈創(chuàng)建完畢。 開篇 作用域是每種計算機語言最重要的基礎(chǔ)之一,因此要想深入的學習JavaScript,作用域和作用域鏈就是個繞不開的話題。 在《深入學習js之—-執(zhí)行上下文?!分形覀兲岬?..
摘要:全局執(zhí)行環(huán)境的變量對象始終是作用域鏈中的最后一個變量對象。綜上,每個函數(shù)對應(yīng)一個執(zhí)行環(huán)境,每個執(zhí)行環(huán)境對應(yīng)一個變量對象,而多個變量對象構(gòu)成了作用域鏈,如果當前執(zhí)行環(huán)境是函數(shù),那么其活動對象在作用域鏈的前端。 1.幾個概念 先說幾個概念:函數(shù)、執(zhí)行環(huán)境、變量對象、作用域鏈、活動對象。這幾個東東之間有什么關(guān)系呢,往下看~ 函數(shù) 函數(shù)大家都知道,我想說的是,js中,在函數(shù)內(nèi)部有兩個特殊...
摘要:每一個執(zhí)行上下文可以訪問的對象包括自身的作用域和父執(zhí)行上下文的作用域和父父執(zhí)行上下文作用域直到全局作用域,這就產(chǎn)生了作用域鏈。語句結(jié)束后,作用域鏈恢復(fù)正常。 0、自己理解 代碼執(zhí)行或函數(shù)調(diào)用生成執(zhí)行上下文(只有當前執(zhí)行上下文有執(zhí)行權(quán)),該執(zhí)行上下文內(nèi)只能訪問當前執(zhí)行上下文的變量、函數(shù)和上一級執(zhí)行上下文中的變量、函數(shù),激活下一個執(zhí)行上下文的時候執(zhí)行權(quán)轉(zhuǎn)移到新的執(zhí)行上下文,形成執(zhí)行上下文棧...
摘要:所以,全局執(zhí)行環(huán)境的變量對象始終都是作用域鏈中的最后一個對象。講到這里,可能你已經(jīng)對執(zhí)行環(huán)境執(zhí)行環(huán)境對象變量對象作用域作用域鏈的理解已經(jīng)他們之間的關(guān)系有了一個較清晰的認識。 JavaScript中的執(zhí)行環(huán)境、作用域、作用域鏈、閉包一直是一個非常有意思的話題,很多博主和大神都分享過相關(guān)的文章。這些知識點不僅比較抽象,不易理解,更重要的是與這些知識點相關(guān)的問題在面試中高頻出現(xiàn)。之前我也看過...
摘要:每一個運行期上下文都和一個作用域鏈關(guān)聯(lián)。這個對象將被推入作用域鏈的頭部,這意味著函數(shù)的所有局部變量現(xiàn)在處于第二個作用域鏈對象中,因此訪問代價更高了。在代碼塊內(nèi)部,函數(shù)的所有局部變量將會被放在第二個作用域鏈對象中。 參考: Javascript作用域原理 理解 JavaScript 作用域和作用域鏈 JavaScript 作用域 作用域就是變量與函數(shù)的可訪問范圍,即作用域控制著變量與函數(shù)...
閱讀 2953·2021-10-28 09:32
閱讀 2987·2021-10-11 10:57
閱讀 3132·2021-10-08 10:05
閱讀 2612·2021-09-28 09:36
閱讀 2224·2019-08-30 15:55
閱讀 2279·2019-08-30 15:44
閱讀 2405·2019-08-30 14:02
閱讀 3086·2019-08-29 17:16