我需要一个javascript函数f
,它给出另一个(匿名)函数g
,名称n
将g
分配给全局范围内的该名称(或者至少目前的范围)。我应该能够像这样使用它:
f(function(){ /* code */ }, "foo");
foo(); // this call should now work!
这可能吗?我需要一个纯JavaScript解决方案,没有DOM东西或类似的东西。这不适合在任何浏览器中运行..
免责声明:我可能会或可能没有充分/有效的理由想要这样做。你不需要告诉我保持全球范围清洁等优点;)
答案 0 :(得分:4)
根据里德
function f(g, n) {
this[n] = g;
}
或者更安全:
function f(g, n) {
(function() { return this; })()[n] = g;
}
答案 1 :(得分:0)
如果您需要符合ES5严格模式,那么您需要:
var addGlobalFunction = (function(global) {
return function (fn, name) {
global[name] = fn;
};
})(this);
对全局对象的引用保存在闭包中。但是很难理解为什么这样的功能可能是必要的。