【问题标题】:Why is window not working when calling external function from closure?为什么从闭包调用外部函数时窗口不起作用?
【发布时间】:2017-03-03 13:26:30
【问题描述】:

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

我有两个 javascript 文件:map.js 和 tutorial.js。根目录中的 Map.js 和 tutorial.js 处于闭包中,因为我希望能够毫无问题地重用它。

map.js 中的函数

function foo(bar){
    // do something
}

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

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

我无法让这个函数实际调用。如您所见,我已经尝试过 window 和 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)。我想从我的闭包中调用它来获取教程。

【问题讨论】:

  • 为什么这个问题会被否决?我以为我提供了足够的信息?

标签: javascript scope closures


【解决方案1】:

代替

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

试试

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

【讨论】:

  • 我以为我已经尝试过了,但没有成功。但是,它现在正在工作!谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-03
  • 2011-01-08
相关资源
最近更新 更多