2016-12-25 52 views
0

我的JS文件看起来像这样,我想使用在控制器内的function()中声明的函数之一。无法从同一个JS文件中的控制器内调用函数

上传HTML时正在调用该文件。

(function() { 
//Lots of different functions 
})(); 

(function(angular) { 
//Controller that uses a function declared above. 
})(window.angular); 

我该怎么做?当我简单地说明函数的名称时,它说“不能文件变量” - 很可能是因为该函数在控制器初始化时没有加载。

+1

如果需要,可以导出它。 – Shomz

+0

该函数对外部不可见,这是使用闭包的全部目的。使用'window.myFunc = myFunc;'声明它成为一个全局函数后。 –

+0

@ChrisG,这很好。 –

回答

0

只有当它可用于外部作用域时,才可以调用另一个函数内定义的函数。

function outer() { 
this.inner = function() { 
    alert("hi"); 
} 
} 

可以通过

(new outer()).inner(); 
1

从控制器内调用外部函数只需创建IIFE或立即调用的功能执行其所有开发人员用它来避免定义在变量或函数的技术全球范围,因为如果你添加任何东西没有这个iife

(function(){}); // iife 

它将被分配给全局窗口对象。这就是为什么你的控制器不能调用上面定义的函数。所以你现在有2米不同的范围第一iife和第二iife

0

一对夫妇涉及同样的想法建议:

  1. 以外的

    (function(angular) { 
        //Controller that uses a function declared above. 
    })(window.angular); 
    

    所以创建功能,它是从访问在那里立即调用函数AND从外部立即调用函数。

  2. 在控制器内部创建函数时,可以通过外部作用域访问它,也许可以将它连接到窗口,例如window.yourFunction = function() { ... }

相关问题