从另一个脚本调用嵌套函数

时间:2014-06-04 10:30:56

标签: javascript jquery

在上下文中,我有两个javascript文件,一个处理实际页面本身,另一个处理弹出教程。每个脚本文件都嵌套在一个函数中,如下所示:

(function () {
    'use strict';
    // script here
}());

在主脚本中有以下功能:

function updateCompView(ident) {
    'use script';
    // code is here
}

然而,我发现如果我在第二个脚本文件(对于教程)中引用此函数,就像这样:

updateCompView('KL-COM-001');

我得到一个未捕获的ReferenceError。我已经设法通过删除顶级函数来解决这个问题,但这意味着我得到了大量的'use strict'JSLint错误。

有没有办法引用嵌套在外部函数中的函数?

1 个答案:

答案 0 :(得分:2)

你必须使它成为可引用的

有三种方法可以做到这一点,所以让我们开始假设你有以下代码

(function () { // this is an IIFE
    "use strict";
    function baz() {}
}()); // this is where it gets invoked

方法1 ,在 IIFE 的开头创建自己的命名空间(只是对象),

if (!window.myNamespace)
    window.myNamespace = {};

然后定义baz后,

window.myNamespace.baz = baz;

现在,您可以通过baz在其他关闭

下访问window.myNamespace.baz

方法2 return来自 IIFE ,位于 IIFE 的末尾

return baz; // or some object containing baz

并且您重构 IIFE 看起来像这样

var foo = (function () {
    // IIFE body
}());

现在,您可以在baz foo d

所在的闭包和后代闭包中通过foo访问var

方法3 ,在全局命名空间中设置baz

有两种选择,一种是将其结构化为函数表达式,而不是var您指定的变量,即

baz = function () {};

另一种方法类似于方法1但没有命名空间。这可以被认为是错误的,因为每次执行它时都会用新的东西来污染全局命名空间。定义baz后,

window.baz = baz;

现在,您可以通过baz访问window.baz,或者只是baz,如果它没有被其他关闭所遮蔽