Javascript 从另一个脚本调用嵌套函数
在上下文中,我有两个javascript文件,一个处理实际页面本身,另一个处理弹出式教程。每个脚本文件嵌套在一个函数中,如下所示:Javascript 从另一个脚本调用嵌套函数,javascript,jquery,Javascript,Jquery,在上下文中,我有两个javascript文件,一个处理实际页面本身,另一个处理弹出式教程。每个脚本文件嵌套在一个函数中,如下所示: (function () { 'use strict'; // script here }()); 主脚本中包含以下函数: function updateCompView(ident) { 'use script'; // code is here } 但是,我发现,如果我在第二个脚本文件(用于教程)中引用此函数,如下所示: 我得
(function () {
'use strict';
// script here
}());
主脚本中包含以下函数:
function updateCompView(ident) {
'use script';
// code is here
}
但是,我发现,如果我在第二个脚本文件(用于教程)中引用此函数,如下所示:
我得到一个未捕获的引用错误。我已经通过删除顶级函数解决了这个问题,但是这意味着我会遇到大量的“use strict”JSLint错误
是否有方法引用嵌套在外部函数中的函数?您必须使其可引用 有三种方法可以做到这一点,所以让我们假设您有以下代码
(function () { // this is an IIFE
"use strict";
function baz() {}
}()); // this is where it gets invoked
方法1,在生命开始时创建自己的名称空间(只是一个对象) 然后在定义了
baz
之后
window.myNamespace.baz = baz;
window.baz = baz;
现在,您可以通过其他闭包下的window.myNamespace.baz
访问baz
方法2,
在您的生命结束时,从生命中返回
你把你的生活改造成这样
var foo = (function () {
// IIFE body
}());
现在,您可以通过foo
在wherefoo
wasvar
d的闭包和子闭包中访问baz
方法3,在全局命名空间中设置
baz
有两种选择,一种是将其构造为函数表达式,而不是var
指定给的变量,即
baz = function () {};
另一种方法类似于方法1,但没有名称空间。这可能被认为是不好的,因为每次这样做时,它都会用新的东西污染全局名称空间。定义了baz
之后
window.myNamespace.baz = baz;
window.baz = baz;
现在,您可以通过
window.baz
访问baz
,或者只要baz
,如果它没有隐藏在其他闭包下,您可能需要阅读JS中的作用域和闭包。您必须使其可引用,例如,如果(!window.myNamespace)window.myNamespace={}然后设置window.myNamespace.updateCompView=updateCompView代码>现在您可以从外部以window.myNamespace.updateCompView
的形式访问它。谢谢您的帮助,它工作得非常好。我对它为什么不起作用有一个模糊的想法,但网上的很多帖子都过于复杂了。这正是我想要的答案,谢谢!
window.baz = baz;