【问题标题】:assigning a function to a name globally将函数分配给全局名称
【发布时间】:2011-06-27 04:50:47
【问题描述】:

我需要一个 javascript 函数 f 给定另一个(匿名)函数 g 和名称 n 将在全局范围内(或至少在当前范围内)将 g 分配给该名称。我应该可以这样使用它:

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

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

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

免责声明:我可能有也可能没有好的/有效的理由想要这样做。你不需要教我保持全局范围清洁等优点。;)

【问题讨论】:

    标签: javascript metaprogramming jint


    【解决方案1】:

    根据里德

    function f(g, n) {
        this[n] = g;
    }
    

    或者为了更安全:

    function f(g, n) {
        (function() { return this; })()[n] = g;
    }
    

    【讨论】:

    • window 不是纯 js 我相信。我不在浏览器中,也没有窗口。
    • @Torbjørn:你在哪个环境下写这个?我需要更多信息才能正确回答您的问题
    • @Torbjørn: 然后用你的全局对象替换 window,或者检索全局对象,如果你不知道它的名称,通过在非严格模式代码中运行 (function () { return this; }())
    • @Reid:我尝试运行它,但没有得到任何回报。环境是 Jint,一个 .NET 中的 JavaScript 解释器。我想这应该是 Jint 特有的问题.. :|
    • “更安全”的版本在 ES5 严格模式下会出错,因为 this 将是 null
    【解决方案2】:

    如果您需要符合 ES5 严格模式,那么您需要:

    var addGlobalFunction = (function(global) {
        return function (fn, name) {
            global[name] = fn;
        };
    })(this);
    

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

    【讨论】:

    • 您是否有参考资料来解释为什么需要合规?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-06
    • 1970-01-01
    • 2019-01-10
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    • 1970-01-01
    相关资源
    最近更新 更多