![](/img/trans.png)
[英]problem calling namespaced function from javascript function in another js file
[英]Calling a javascript function from another .js file
我有兩個外部.js文件。 第一個包含一個函數。 第二個調用函數。
file1.js
$(document).ready(function() {
function menuHoverStart(element, topshift, thumbchange) {
... function here ...
}
});
file2.js
$(document).ready(function() {
setTimeout(function() { menuHoverStart("#myDiv", "63px", "myIMG"); },2000);
});
麻煩的是,這不是運行該功能。 我需要兩個單獨的文件,因為file2.js是根據特定條件動態插入的。 如果我在file1.js的末尾包含setTimeout ...行,則此函數有效
有任何想法嗎?
問題是, menuHoverStart
在其作用域之外是不可訪問的(由文件#1中的.ready()
回調函數定義)。 您需要在全局范圍內(或通過全局范圍中可用的任何對象)使此功能可用:
function menuHoverStart(element, topshift, thumbchange) {
// ...
}
$(document).ready(function() {
// ...
});
如果希望menuHoverStart
保留在.ready()
回調中,則需要手動將該函數添加到全局對象(使用函數表達式):
$(document).ready(function() {
window.menuHoverStart = function (element, topshift, thumbchange) {
// ...
};
// ...
});
您已在函數內聲明了menuHoverStart
(您傳遞給就緒的匿名函數)。 這將其范圍限制為該功能,您無法從該功能外部調用它。
它沒有做任何事情,所以在ready事件觸發之前不需要暫停定義它,所以你可以將它移到匿名函數之外。
也就是說,全局變量值得避免,因此您可能更喜歡定義命名空間(以降低名稱沖突的風險)並將該函數掛起。
var MYNAMESPACE = {}; // In the global scope, not in a function
// The rest can go anywhere though
MYNAMESPACE.menuHoverStart = function (element, topshift, thumbchange) {
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.