2011-12-18 46 views
-1

說我添加到First.js:註冊功能,DOM準備與jQuery

$(document).ready(

function() { 
    dosomething A 
    }); 

function() { 
    dosomething C 
    }); 
}); 

,並Second.js:

$(document).ready(

function() { 
    dosomething B 
    }); 
}); 

會後DOM準備好所有的3個功能被執行?

會是怎樣的情況,當我註冊

到First.js:

$(document).ready(
A = function() { 
    dosomething A 
    }); 

C = function() { 
    dosomething C 
    }); 
}); 

到Second.js:

$(document).ready(
A = function() { 
    dosomething A 
    }); 

}); 

後者將覆蓋第一?

TIA

+2

您的示例代碼中有一堆語法錯誤;請檢查並更正它。 – Shad 2011-12-18 22:03:31

+0

例如'.ready'以__function__爲參數。 – Shad 2011-12-18 22:06:42

+0

我認爲這是僞代碼。我認爲這個問題很清楚,即使提供的例子中存在「語法錯誤」。 – David 2011-12-18 22:07:42

回答

2

你的第一個例子是無效的語法。它會導致JavaScript解釋器拋出異常。您需要將一個且僅有的一個函數傳遞給$(document).ready(fn)。您可以在一個函數中包含多個函數調用,但只能將一個函數傳遞給.ready()

你的第二個例子也是一個語法錯誤 - 一個額外的});。如果刪除了它,它將工作並執行該功能。

您在first.jssecond.js中的第三個示例也是一個語法錯誤。您不能將任意javascript作爲參數放入.ready()。它必須是具有適當語法的一個函數引用。

現在,您可能一直試圖問您是否在您的示例中實際提供了合法語法,因爲您將傳遞給.ready(fn)的所有功能都將在文檔準備就緒時執行。 jQuery保存已傳遞的所有函數的數組,並在文檔準備就緒時執行它們。如果.ready()已被多次調用多個函數,但.ready()的jQuery文檔沒有指定調用順序,但可以檢查源代碼並查看可能的順序。

1

後者將覆蓋第一?

不,您可以爲單個事件分配多個功能。

我假設你的語法錯誤是無意的。它們被寫入的方式,沒有代碼被執行。

+0

我假設'不'是這個問題:「後者會覆蓋第一個?」,我投了贊成票。 – 2011-12-18 22:03:34

+0

-1這是不正確的。後面的代碼將會替換第一個代碼所設置的值。 – Guffa 2011-12-18 22:10:08

+0

這甚至不是有效的JS,所以沒有它不會。您正在對問題中不明確的代碼做出假設。 – BNL 2011-12-18 22:11:14

-1

是的,您可以多次綁定相同的事件而不會出現任何問題。

是的,第二個代碼將替換由第一個代碼設置的值。

+1

爲什麼downvote?如果你不解釋你認爲是錯誤的,它不能改善答案。 – Guffa 2011-12-18 23:29:29

2

「在DOM準備就緒後,所有3個函數都會執行嗎?」

是的。每次綁定要在DomReady中執行的內容時,jQuery都會將該函數排列在內部數組中,然後按照與「插入」相同的順序執行它們。

以後會覆蓋第一個?

是的,除非你在定義之前加上var。 JavaScript將把A放在窗口範圍內,所以下一個定義將覆蓋第一個。

function() { 
    var A = 0; // this will only exist within the function 
} 

function() { 
    A = 1; // this will be added to the "global" scope (window). 
}