2015-04-23 33 views
-1

那麼JavaScript解釋器如何處理多個相同的函數調用呢?它是否會覆蓋以前的內容,或導致某種混亂?是否多次調用JavaScript函數會導致任何不需要的問題?

我在控制檯寫了一些函數,最新的似乎總是工作並覆蓋舊的函數,我總是害怕舊函數被保存起來,我認爲這會導致性能問題/膨脹。

舉例來說。

$('body').on('click', function() { alert('hello') }); 

會提醒hello,然後我重寫同樣的功能再次提醒你好

$('body').on('click', function() { alert('hello') }); 

會發生什麼?它是否取代它,創建一個新的副本?

+1

您將事件綁定了兩次,因此您的代碼每次點擊發生兩次 –

+2

您綁定了兩個事件,它們具有兩個完全相同的* * distinct *匿名函數。這就是爲什麼JSLint建議不要在循環中定義匿名函數。 –

+0

做第一個和第二個 – madalinivascu

回答

2

是的,即使您將更多事件綁定到同一元素,即使事件與先前綁定的事件相同,事件偵聽器仍將保持活動狀態。

您可以在this jsfiddle中觀察到此行爲。

// Example with anonymous function - this will print 'hello' twice 
$('#btn1').on('click', function() { alert('hello') }) 
$('#btn1').on('click', function() { alert('hello') }) 

// Example with named function - this will work exactly the same 
function sayHello() { 
    alert('hello') 
} 

$('#btn2').on('click', sayHello) 
$('#btn2').on('click', sayHello) 

要刪除以前綁定的聽衆,你必須使用removeEventListener()方法或者其替代的jQuery,unbind()

+1

感謝你們,並把那些投下的人們都搞砸了:) –

相關問題