2011-12-30 80 views
4

我有一個可能的簡單問題,我需要幫助。未定義jquery函數 - 範圍問題?

我有兩個js文件,我已經通過html中的標籤加載到頁面上。這兩個文件中的所有代碼都在$(document).ready();內執行/加載

在某個事件上,第一個文件中定義的函數A試圖調用另一個文件中定義的函數B.然而,這失敗了,我得到一個錯誤,沒有定義函數B.

我注意到,如果我在$(document).ready()之外定義了函數B,那麼函數A可以調用函數B--它在範圍之內。

爲什麼?

+2

是的,範圍問題。 JavaScript有函數作用域,所以你在document.ready中創建的函數只能在該函數內部訪問***,除非你通過將函數附加到全局對象('window'對於瀏覽器)。但這不是正確的解決方案 - 我相信有比這更好的解決方案。 – Anurag 2011-12-30 03:33:23

+0

哈哈......當然。現在看起來很明顯。第二個文件具有我已經做出不可知的功能,因此它們可以是全局的。我的印象是在ready回調中運行的代碼將是全局的。謝謝。 – gdbj 2011-12-30 04:08:48

回答

3

這是一個範圍問題。在函數中定義的所有東西只能在該函數中使用,除非以其他方式全局化。當您將該功能移到就緒功能之外時,它將變得全球化,從而使其可以全球訪問。

編輯:當我說「在一些其他的方式進行全球性的」,我的意思是這樣的:

window.something = "something"; 

即使這行代碼你準備函數中存在這將創建一個全局變量something

+0

謝謝詹姆斯。對於JQuery來說是新的,並且認爲.ready中的任何東西都會神奇地具有全局範圍。 – gdbj 2011-12-30 04:10:47