javascript - 是否可以传递立即调用的函数表达式的执行上下文

标签 javascript

考虑以下代码:

(function() {
    var a = 5;
    var someFunc = function() { ... };
    function anotherFunc() {
        ...
    };
})();

window.myGlobalObj = {
    init: function() {
        // and somehow here I want to  access to the IIFE context
    }
};

我想在我的全局对象中有 IIFE 的执行上下文。我确实有权访问函数表达式和对象本身,因此我可以传递或修改某些内容以使其工作(不,我不能重写对象或函数中的所有内容)。

有可能吗?

最佳答案

我认为这是可行的唯一方法是使用 eval 来模拟动态范围。这样做(注意 IIFE 必须放在全局对象之后):

window.myGlobalObj = {
    init: function() {
        // and somehow here I want to  access to the IIFE context
    }
};

(function() {
    var a = 5;
    var someFunc = function() { ... };
    function anotherFunc() {
        ...
    };

    eval("(" + String(window.myGlobalObj.init) + ")").call(window.myGlobalObj);
})();

这是关于如何使用动态范围的引用:Is it possible to achieve dynamic scoping in JavaScript without resorting to eval?

编辑:我提供了一个示例来演示在 JavaScript 中使用动态范围的强大功能。你可以玩fiddle也是。

var o = {
    init: function () {
        alert(a + b === this.x); // alerts true
    },
    x: 5
};

(function () {
    var a = 2;
    var b = 3;

    eval("(" + String(o.init) + ")").call(o);
}());

关于javascript - 是否可以传递立即调用的函数表达式的执行上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10279026/

相关文章:

javascript - 点击日历的问题

javascript - Underscore.js _.isElement 函数

javascript - TinyMCE 无法获取未定义或空引用的属性 'setContent'

javascript - 将元素移动到前面而不破坏事件

php - 如何使用 PHP + JS +(MySQL?)+(AJAX?)进行快速、轻量级、经济的在线聊天

php - 链式选择框 - 基本

javascript 调用 DataSnap REST 使浏览器无响应

JavaScript Highcharts : how to have two xAxis categories?

javascript - 从/到 Javascript 字符串从 Go int64/uint64 序列化反序列化

javascript - 如何在鼠标悬停在链接上时在链接页面的小弹出窗口中显示实时预览?