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

Disable Function 的陷阱

  • 第二次執行 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

Disable Function 的陷阱

Functional

let func = item => {
  console.log(item);
  func = () => {};
};

const arr = [1, 2, 3];

arr.forEach(func);

我們都知道 for loop 可用 Functonal 的 forEach() ,在不改變 func() 下改用 forEach()

Disable Function 的陷阱

  • 竟然出現令人驚訝的結果, forEach() 完整印出 123

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 的陷阱》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

破茧成蝶:用户体验设计师的成长之路

破茧成蝶:用户体验设计师的成长之路

刘津、李月 / 人民邮电出版社 / 2014-7 / 69.00

市面上已经有很多专业的用户体验书籍,但解决用户体验设计师在职场中遇到的众多现实问题的图书并不多见。本书从用户体验设计师的角度出发,系统地介绍了其职业生涯中的学习方法、思维方式、工作流程等,覆盖了用户体验设计基础知识、设计师的角色和职业困惑、工作流程、需求分析、设计规划和设计标准、项目跟进和成果检验、设计师职业修养以及需要具备的意识等,力图帮助设计师解决在项目中遇到的一些常见问题,找到自己的职业成长......一起来看看 《破茧成蝶:用户体验设计师的成长之路》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

URL 编码/解码
URL 编码/解码

URL 编码/解码

html转js在线工具
html转js在线工具

html转js在线工具