gpt4 book ai didi

javascript - 如何在不考虑范围的情况下动态创建命名函数?

转载 作者:行者123 更新时间:2023-11-29 17:01:38 25 4
gpt4 key购买 nike

这个有效:

var i = 'foo';
eval('function '+i+'(param) { this.param = param; return this; }');
console.log(foo); // [Function: foo]

这不是:

['bar', 'quux'].forEach(function(i) {
eval('function '+i+'(param) { this.param = param; return this; }');
});
console.log(bar); // ReferenceError: bar is not defined

显然,forEach 函数或其从属范围混淆了事情。我检查过 bar 函数在 during 期间可用,但它在外部不存在。

最佳答案

forEach 回调创建了一个闭包。该闭包中定义的任何内容都与世界隔绝。您可以想象代码的最终结果与此等效:

function() {
function bar() { ... }
function quux() { ... }
}
// bar and quux are out of scope here :(

如果你想让它们对世界可用,你将需要一些对象来附加这些函数。 window 是最便宜的,或者像这样的东西好一点:

var myScope = {};
['bar', 'quux'].forEach(function(i) {
eval('myScope["'+i+'"] = function(param) { this.param = param; return this; }');
});
myScope.bar(); // woo hoo!

关于javascript - 如何在不考虑范围的情况下动态创建命名函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27000409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com