栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JavaScript中的函数只能调用一次

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JavaScript中的函数只能调用一次

如果用“将不执行”来表示“多次调用将不执行任何操作”,则可以创建一个闭包:

var something = (function() {    var executed = false;    return function() {        if (!executed) { executed = true; // do something        }    };})();something(); // "do something" happenssomething(); // nothing happens

使用全局变量,其他代码可以重置“已执行”标志的值(无论您为它选择什么名称)。使用闭包时,其他代码都无法做到这一点,无论是偶然还是故意的。

正如这里的其他答案所指出的那样,几个库(例如Underscore和Ramda)都有一个小的实用程序函数(通常名为

once()
[*]),该函数接受一个函数作为参数并返回另一个函数,该函数仅调用一次所提供的函数,而无论如何多次调用返回的函数。返回的函数还会缓存所提供的函数首先返回的值,并在后续调用中返回该值。

但是,如果您不使用这样的第三方库,但仍然想要这样的实用程序功能(而不是我上面提供的现成的解决方案),则很容易实现。我见过的最好的版本是DavidWalsh发布的这个版本:

function once(fn, context) {     var result;    return function() {         if (fn) { result = fn.apply(context || this, arguments); fn = null;        }        return result;    };}

我倾向于更改

fn = null;
fn=context=null;
。有没有理由,关闭,保持一个参考
context
一旦
fn
被调用。

[*]
但是,请注意,其他库(例如jQuery的Drupal扩展)可能具有名为的函数

once()
,该函数的功能完全不同。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/614697.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号