2013-03-08 24 views
0

分配點擊收聽只是想知道有什麼區別:不同方式在jQuery的

$("#some_div").click(customFunction); 

$("#some_div").click(function() { customFunction(); }); 

...

function customFunction() { 

    console.dir(this); 

} 

回答

1

在你定義了兩個第二函數一個匿名和其他customFunction,首先你只有一個匿名函數。

+2

'this'的值是不同的。 – jantimon 2013-03-08 15:10:52

0

可能沒有區別。除了第一個選項,你只聲明瞭一個函數。

0

在實踐中,它可能不會有所作爲(如果它目前工作兩種方式)。

然而,理論上存在很大的差異。

  1. 所有事件處理程序都獲得event參數。在第一種情況下,這是通過customFunction,第二種情況不是。這意味着第一個參數的值將是undefined
  2. jQuery調用事件處理程序,事件的目標爲this。然而,您的第二種情況的customFunction執行中的this將指向window
  3. 您可以在附加事件處理程序的時間與執行時間之間更改customFunction變量的值。如果你這樣做,你的第一個案例將執行舊功能,然而,第二個案例會「尊重」customFunction的新值並執行該功能。

一般來說,第二種情況更靈活(但也承擔額外的嵌套函數調用的開銷)。如果你真的需要更多的靈活性(見點#3),而不犧牲(點#1和#2),使用下面的結構:

$("#some_div").click(function() { customFunction.apply(this, arguments); }); 

這將同時使用原來的參數還有this(中外函數)調用內函數(customFunction),但仍然允許在執行事件處理程序時換出customFunction的實現。