在上下文中,我有两个javascript文件,一个处理实际页面本身,另一个处理弹出教程。每个脚本文件都嵌套在一个函数中,如下所示:
(function () {
'use strict';
// script here
}());
在主脚本中有以下功能:
function updateCompView(ident) {
'use script';
// code is here
}
然而,我发现如果我在第二个脚本文件(对于教程)中引用此函数,就像这样:
updateCompView('KL-COM-001');
我得到一个未捕获的ReferenceError。我已经设法通过删除顶级函数来解决这个问题,但这意味着我得到了大量的'use strict'JSLint错误。
有没有办法引用嵌套在外部函数中的函数?
答案 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
,如果它没有被其他关闭所遮蔽