从闭包中调用外部函数时,为什么窗口不起作用?

时间:2017-03-03 13:26:31

标签: javascript scope closures

我正在尝试将函数传递给我的简单教程代码,以便我可以在页面上触发事件。

我有两个javascript文件:map.js和tutorial.js。 root.ands中的Map.js在一个闭包中,因为我希望能够重复使用它而没有任何问题。

map.js中的

函数

function foo(bar){
    // do something
}

tutorial.js中的闭包。我只是包含我的callFunc方法,但我从页面上具有数据属性的元素获取$ step。

<li data-func="foo" data-param="bar">...</li>

我无法让这个功能实际调用。正如你所看到的,我已经尝试过窗口和root。

(function ($, root, window) {
    // Use strict mode to reduce development errors.
    // @link http://www.nczonline.net/blog/2012/03/13/its-time-to-start-using-javascript-strict-mode/
    "use strict";

    /**
     * Calls function from step and passes params.
     */
    function callFunc($step) {
        var func = $step.attr("data-func");
        var param = $step.attr("data-param");
        if (func !== undefined) {
            console.log(root.func);
            if (param !== undefined) {
                window.func(param);
            } else {
                window.func();
            }
        }
    }

})(jQuery, this, window);

map.js文件有一个函数foo(bar)。我想从我的闭包中调用它来进行教程。

1 个答案:

答案 0 :(得分:1)

而不是

window.func(param);
window.func();

尝试

window[func](param);
window[func]();