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