如何使 Function 只執行一次 ?

栏目: JavaScript · 发布时间: 7年前

内容简介:實務上某些 function 會傳入ECMAScript 2015很明顯會印出

實務上某些 function 會傳入 Array.prototype.forEach() ,但我們只想執行一次而已,如符合條件就只執行一次,其餘僅管符合條件,但都不執行,我們該怎麼做呢 ?

Version

ECMAScript 2015

Scenario

const func = item => console.log(item);

[1, 2, 3].forEach(func);

很明顯會印出 1 、 2 與 3 。

但我們想只印出 1 即可, 2 與 3 都不要印。

Closure

const createFunc = () => {
  let count = 0;

  return item => {
    if (count++) return;

    console.log(item);
  };
};

const func = createFunc();

[1, 2, 3].forEach(func);

一個很直覺的思考方式,希望有個 count variable 幫我們統計,若 count 為 0 就印,其他都不要印。

ECMAScript 要達成這種 private variable,必須依賴 Closure,所以特別另外建立 createFunc() ,使 count 成為其 local variable,然後 return 新 function,使其與 count 做連結。

count 為 0 時為 Falsy Value,因此印出 1 ,但 count 為 1 之後就為 Truth Value,就不再繼續執行。

如何使 Function 只執行一次 ?

const createFunc = () => {
  let once = false;

  return item => {
    if (once) return;

    console.log(item);
    once = true;
  };
};

const func = createFunc();

[1, 2, 3].forEach(func);

一樣使用 Closure,但既然只執行一次,其實不必使用 counter,只需一個 Boolean flag 即可。

一開始令 once 為 false ,因此會印出 1 ,印完馬上令 once 為 true ,從此就不會再印出任何值。

如何使 Function 只執行一次 ?

Property

const func = item => {
  func.once || console.log(item);
  func.once = true;
};

[1, 2, 3].forEach(func);

ECMAScript 是動態語言,可以動態建立 property,利用這個語言特性,其實可把動態建立 property 當成 private variable 使用。

一開始沒有 once property,為 Falsy Value,因此 || 會印出 1 。

然後馬上建立 once property,並令其為 false ,之後就再也不會印出任何值。

如何使 Function 只執行一次 ?

Conclusion

  • Closure 是 ECMAScript 很精彩的語言特性,在 OOP 必須借用 private field 實現的功能,在 FP 可藉由 Closure 實現
  • 動態建立 property 也是 ECMAScript 很精彩的語言特性,利用其不存在 property 為 undefined 的特性,視其為 Falsy Value,執行完後再動態建立 property 為 ture ,當成 local variable 使用

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

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

Python高性能编程

Python高性能编程

【美】 戈雷利克 (Micha Gorelick)、【美】 欧日沃尔德(Ian Ozsvald) / 人民邮电出版社 / 2017-7-1 / 79

本书共有12章,围绕如何进行代码优化和加快实际应用的运行速度进行详细讲解。本书主要包含以下主题:计算机内部结构的背景知识、列表和元组、字典和集合、迭代器和生成器、矩阵和矢量计算、并发、集群和工作队列等。最后,通过一系列真实案例展现了在应用场景中需要注意的问题。 本书适合初级和中级Python程序员、有一定Python语言基础想要得到进阶和提高的读者阅读。一起来看看 《Python高性能编程》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

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

Base64 编码/解码

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

URL 编码/解码