2016-12-25 23 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() { ... }

相關問題