關於閉包問題二

2022-08-11 21:21:09 字數 970 閱讀 4394

我在整理閉包問題的時候,看到一道前端面試題

for (var i = 0; i < 10; i++) , 0);

}了解 js 的非同步機制的都知道,輸出結果是:10 10 10 ... 10

然後面試官又問 如果希望得到的是0 1 2 ... 9,如何能夠解決這個問題

我腦海想到的第乙個解決方法就是用let代替var使for形成塊級作用域;

第二個解決方法,使settimeout函式立即執行,形成同步輸出:

for (var i=0; i < 10; i++) , 0);

})(i);

function fun(n,o)

}}var a=fun(0);

a.fun(1);

a.fun(2);

a.fun(3);

var b=fun(0).fun(1).fun(2).fun(3);

var c=fun(0).fun(1);

c.fun(2);

c.fun(3);

這道題可以較深理解閉包機制,解決這道題比較重要的是理解被保護的資料是哪乙個,執行的順序之類的,輸出:

var a=_fun_(0);//undefined

a.fun(1);//0

a.fun(2);//0

a.fun(3);//0

var b=a.fun(0).fun(1).fun(2).fun(3);

//undefined,0,1,2

var c=fun(0).fun(1);//undefined,0,

c.fun(2);//1

c.fun(3); //1

我在這就不多做解釋了,想一下很容易通的

閉包 解決閉包問題

1 函式和對其周圍狀態 lexical environment,詞法環境 的引用 在一起構成閉包 closure 2 函式與函式所依賴的上下文環境組成閉包問題。3 閉包指的是 能夠訪問另乙個函式作用域的變數的函式。清晰的講 閉包就是乙個函式,這個函式能夠訪問其他函式的作用域中的變數。var arr ...

關於閉包 1

python閉包時提起,我一直都沒覺得這個錯誤和閉包有什麼太大的關係,但是它倒是的確是在python函式式程式設計是容易犯的乙個錯誤,我在這裡也不妨介紹一下。先看下面這段 python for i in range 3 print i 在程式裡面經常會出現這類的迴圈語句,python的問題就在於,當...

關於閉包函式

閉包函式其實跟普通函式呼叫沒啥子很大的差異,只不過所謂閉包,就是把當前函式內部封閉對外留個介面呼叫 普通函式好像也差不多 基本用法 function test string echo b a test1 sdsdsd 就像不能訪問全域性變數一樣 b function a function test1...