2011-04-18 53 views
0

我使用jQuery和從頭部稱爲外部JavaScript文件,我有這樣的:功能是無法訪問的

$(document).ready(function() { 
    var localDb = null; 
    function updateLocalStorage() { 
     // localDb is set here 
    } 
}); 

在頁面的底部,我開始與文檔的新節。就緒,但是localDb變量和updateLocalStorage函數都不可訪問。

$(document).ready(function() { 
    updateLocalStorage(); 
}); 

我得到一個錯誤說「未捕獲的ReferenceError:未定義updateLocalStorage。」爲什麼會發生這種情況,以及如何訪問先前定義的功能?

+0

您是否嘗試設置一個$(document).ready函數?把你的定義放在ready函數之外,看看發生了什麼 – Dave 2011-04-18 17:01:02

回答

3

您正在將updateLocalStorage定義爲只能從該就緒處理程序訪問的本地內部函數。也是局部變量localDb的情況。

如果你在$(document).ready()調用之外定義函數和變量,它會工作正常;

0

爲什麼不只是做:

$(document).ready(updateLocalStorage()); 
function updateLocalStorage() { // localDb is set here  } 
0

這是因爲你的一個匿名函數內包裝的功能,所以這只是該範圍內的可用,你應該做的是功能導出到像這樣在全球範圍內:

$(document).ready(function() { 
    var localDb = null; 

    function updateLocalStorage(){ 
     // localDb is set here 
    } 

    window.updateLocalStorage = updateLocalStorage; 
}); 

,你不應該需要準備一個文件包內的功能,更好的方法來控制全球範圍內是自調用匿名函數來執行所需的代碼。

(function(){ 

    var updateLocalStorage = function() 
    { 
    } 

    $(document).ready(updateLocalStorage); 

})(); 
+0

這裏有兩個問題:'global.updateLocalStorage ='會導致錯誤,因爲全局是未定義的,我想你的意思是'window.updateLocalStorage ='。其次,沒有匿名函數,該函數被命名爲updateLocalStorage,它是一個內部函數,但不是匿名的。 – 2011-04-18 18:05:22

+0

是固定的,我最近編寫的程序跟node.js一樣瘋狂,而且我有點困惑。 – RobertPitt 2011-04-18 19:25:23

0

你會更好使用

var updateLocalStorage; 

$(document).ready(function() { 
    var localDb = null; 
    updateLocalStorage = function() { 
     // localDb is set here 
    } 
}); 

,然後在你的函數中用到它。