2012-07-07 79 views
0
  1. 的問題是,爲什麼調試到一個函數,我們怎麼知道,封閉的內容該功能是指什麼?如何調試JavaScript關閉?

    我知道,谷歌Chrome瀏覽器將顯示在「範圍變量」部分,封閉但其他瀏覽器是什麼? (更新:FF有類似的事情,但不把它稱爲「關閉」,但就像局部變量)

  2. 動機的第一個問題實際上是沿着一邊看<學習jQuery的到來,第三版> - 附錄A.

    在355頁上,作者說下面的代碼段將導致內存泄漏在IE由於環路參考(點擊處理程序指的是具有DOM按鈕的閉合含量)。

    我只是好奇它是否是這種情況通過調試到單擊處理程序關閉content.However谷歌瀏覽器不顯示任何閉包變量。

    因此我不知道作者是如何知道循環引用問題..


$(document).ready(function() { 
    var button = document.getElementById('button-1'); 
    button.onclick = function() { 
    $.print('hello'); 
    return false; 
    }; 
}); 

謝謝。

+0

就筆者所知,因爲(在這種情況下),這是顯而易見的:變量「按鈕」是指一個DOM節點,它的「點擊」屬性設置爲一個函數,該函數在其範圍內的變量。 – Pointy 2012-07-07 13:39:06

+0

等待,只有當處理程序實際引用按鈕時,這不是一個問題嗎?這是正確的例子嗎? – 2012-07-07 15:40:48

+0

@Pointy我的觀點實際上就是'onclick'處理函數沒有引用變量'button'。因此,變量'button'如何關閉該函數?否則,我是以一種非常不正確的方式思考? – Simon 2012-07-09 05:06:31

回答

1

我要提到你使用Firebug調試代碼。它是最好的插件可用與沒有問題的確切答案,但你可能想看看這些鏈接。

Tools for debugging memory leaks in JavaScript

how to trace or debug javascript closures in firebug

Debugging closures in javascript

你甚至可以檢查出YouTube鏈接,以獲取更多信息。

希望我試過回答一些有用的東西。

+0

這個問題非常具體。這個答案太泛泛。請添加更多詳細信息。 – 2012-07-07 13:47:56

+0

@RobW我用幾個鏈接編輯了我的答案。希望這能讓你滿意。儘管他們並不是我假設的完美答案。 :) – 2012-07-07 19:48:37

+0

@RobW第一個鏈接爲我提供了我所知道的最佳解決方案之一。它完美地回答了這個問題,但是會給出一個很好的見解。 – 2012-07-07 20:00:25