JavaScript Weird Part (38)- 閉包 [1]

閉包 (closures) 是深入了解 JavaScript 不可或缺的概念。先前學習的一級函數、執行堆、執行環境的觀念,都有助我們學習閉包概念。

以下創造一個 greet 函數,並且接受一個參數whattosay,並且用函數表示式回傳一個函數,再利用範圍鏈引入 whattosay

1
2
3
4
5
function greet(whattosay) {
return function(name) {
console.log(whattosay + "" + name);
};
}

假設我的解釋如下,這樣子是正確的嗎?

1.「跟函式內的變數執行環境有關,若函式 A 內的函式 B 有引用到函式 A 的變數,則函式 A 會保留當下的執行環境,稱為閉包。」 2.作者的解釋思路這次鐵人賽我有寫到:
https://ithelp.ithome.com.tw/articles/10225979
簡單來說,任何「能”記憶” 執行情境,來存取 lexical scope 的行為」都算。
範例就以你提問的東西: 「跟函式內的變數執行環境有關,若函式 A 內的函式 B 有引用到函式 A 的變數,則函式 A 會保留當下的執行環境,稱為閉包。」
那就可以舉一個簡單的 functional 思路當然,符合 「能”記憶” 執行情境,來存取 lexical scope 的行為」,這種手法也是 functional programming 的基礎,不過這就是延伸閱讀了

3.面試你時候,可以用 setTimeout 寫一個,能印出 for 裡面的 index 的方法就好

for (let index=0;index<3;index++){
setTimeout(()=>{
console.log(index);0,1,2
},0);
}

Powered by Hexo and Hexo-theme-hiker

Copyright © 2013 - 2019 CYC'S BLOG All Rights Reserved.

UV : | PV :