學習筆記 乙個例題弄懂作用域鏈

2021-09-20 21:32:27 字數 919 閱讀 1713

作用域 [[scope]] :儲存了執行期上下文的集合。

作用域鏈:[[scope]]作用域中所儲存的執行期上下文物件的集合,這個集合呈鏈式鏈結,我們把這種鏈式鏈結叫做作用域鏈。

function test()

function b()

return [a,b];//返回乙個函式陣列

}var myarr=test();

myarr[0] (); //執行函式a

myarr[1] (); //執行函式b

此題的輸出是:101;100

這裡的function a和b是並集的關係,屬於同一等級,但如果是包含關係,則此函式test執行方式不同,此題中並集的函式a和b共用同乙個function test()的作用域,所以乙個值的改變必然會導致另乙個值的改變。

作用域鏈分析:

function test() //函式a被定義,它的作用域鏈是:先test()的ao---->再是go

function b()//函式b被定義,它的作用域鏈是:先test()的ao---->再是go

return [a,b];

}var myarr=test();

myarr[0] ();//函式a執行,作用域鏈是:先a()的ao--->再test()的ao---->再是go

myarr[1] ();//函式b執行,作用域鏈是:先b()的ao--->再函式a()執行過改動後的test()的ao---->再是go

go(global object):全域性的執行期上下文。

ao(activation object):當前函式執行時自己產生的執行期上下文。

函式定義時不會產生自己的執行期上下文ao,在執行時才會產生,並且是先在自己的執行期上下文中找,自己的找不到再往上一層找。

乙個例子看懂js函式作用域

var myobject myobject.func 程式的輸出是什麼?依次輸出bar bar undefined bar 理解關鍵 方法 函式是由誰 物件 呼叫 的,方法 函式內部的這就是指向誰 該物件 注意 被誰 呼叫,不是處於誰的作用域,即使在作用域 1,func是由myobject呼叫的,這...

乙個關於JS作用域鏈的例子

乙個關於js作用域鏈的例子,如下 1 var x 10 function foo function 執行結果 2 var x 10 function foo function 執行結果 簡單分析 兩段 唯一的區別是第6行,即匿名函式中對變數x的賦值。1,var x 20,2,x 20。在函式建立時,...

ACM bitset 的基本用法 (附帶乙個例題)

bitset 100 a代表你定義了乙個長度為 100 的二進位制串。需要注意的是 bitset 的 中的數必須要是常數不能是變數,因為他需要在編譯的時候確定大小,這一定也讓我肯定了它內部是位域組織的。bitset 10000 d 100 7 d n set 全部置1 cout 題目描述 一共有 n...