Disable Function 的陷阱
栏目: JavaScript · 发布时间: 7年前
内容简介:For loop 看似與ECMAScript 2015由於 ECMAScript 是動態語言,甚至可以 disable 自己,只要將 empty function
For loop 看似與 forEach() Higher Order Function 等效,但若用在使用 Empty Function 來 disable function 時,會有意想不到的結果出現。
Version
ECMAScript 2015
Introduction
let func = item => {
console.log(item);
func = () => {};
};
func('Sam');
func('Kevin');
由於 ECMAScript 是動態語言,甚至可以 disable 自己,只要將 empty function () => {} 指定給 variable 即可。
Imperative
- 第二次執行
func()時,已經是undefined,因為已經成為 empty function 了
let func = item => {
console.log(item);
func = () => {};
};
const arr = [1, 2, 3];
for(let i = 0; i < arr.length; i++)
func(arr[i]);
連續使用 for loop 執行 3 次,也如預期只能印出 1 ,剩下都是 undefined 。
Functional
let func = item => {
console.log(item);
func = () => {};
};
const arr = [1, 2, 3];
arr.forEach(func);
我們都知道 for loop 可用 Functonal 的 forEach() ,在不改變 func() 下改用 forEach() 。
- 竟然出現令人驚訝的結果,
forEach()完整印出1、2與3
Why Not ?
forEach() 理論上與 for loop 等效,且在 func() 完全沒改變的狀態下,為什麼結果完全不如預期呢 ?
For loop 的 Imperative 是一行一行執行,是在同一個 execution context 執行 func = () => {}; ,因此會影響接下來的執行。
但 forEach() 是傳入 function 定義 ,然後在各自的 execution context 執行 func = () => {}; ,因此不會互相影響,這也是為什麼 FP 沒有 Side Effect 的原因。
Conclusion
- 將 function 指定成 empty function 雖然能達成自我 disable 的效果,但在 FP 下的 Higher Order Function 會無效,主要是因為 FP 是傳入 function 定義,然後在各自 execution context 執行,而不是如 Imperative 都在同一個 execution context 會有前後影響
以上所述就是小编给大家介绍的《Disable Function 的陷阱》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
程式之美-微軟技術面試心得
編程之美小 / 悅知文化 / 2008.06.20 / 490元
書內容分為以下幾個部分: ▓ 遊戲之樂:從遊戲和其他有趣問題出發,化繁為簡,分析總結。 ▓ 數字之魅:程式設計的過程實際上就是和數字及字元打交道的過程。這一部分收集了一些這方面的有趣探討。 ▓ 結構之法:彙集了常見的對字串、鏈表、佇列,以及樹進行操作的題目。 ▓ 數學之趣:列舉了一些不需要寫具體程式的數學問題,鍛煉讀者的抽象思考能力。 ▓ 書中絕大部分題目都提供了詳細......一起来看看 《程式之美-微軟技術面試心得》 这本书的介绍吧!