Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从另一个脚本调用嵌套函数_Javascript_Jquery - Fatal编程技术网

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

Javascript 从另一个脚本调用嵌套函数,javascript,jquery,Javascript,Jquery,在上下文中,我有两个javascript文件,一个处理实际页面本身,另一个处理弹出式教程。每个脚本文件嵌套在一个函数中,如下所示: (function () { 'use strict'; // script here }()); 主脚本中包含以下函数: function updateCompView(ident) { 'use script'; // code is here } 但是,我发现,如果我在第二个脚本文件(用于教程)中引用此函数,如下所示: 我得

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

(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
在where
foo
was
var
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;