全局为名称分配函数

时间:2011-06-27 04:50:48

标签: javascript metaprogramming jint

我需要一个javascript函数f,它给出另一个(匿名)函数g,名称ng分配给全局范围内的该名称(或者至少目前的范围)。我应该能够像这样使用它:

f(function(){ /* code */ }, "foo");

foo(); // this call should now work!

这可能吗?我需要一个纯JavaScript解决方案,没有DOM东西或类似的东西。这不适合在任何浏览器中运行..

免责声明:我可能会或可能没有充分/有效的理由想要这样做。你不需要告诉我保持全球范围清洁等优点;)

2 个答案:

答案 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);

对全局对象的引用保存在闭包中。但是很难理解为什么这样的功能可能是必要的。