2011-04-21 70 views
1

我使用黽讓我的JavaScript的錯誤報告和最近我得到這個錯誤:重新聲明

redeclaration of var console

回溯不是非常有用:

internal: : 

:0:in `{anonymous}()' 

,我知道它發生在「Mozilla/5.0(X11; U; Linux x86_64; zh-CN; rv:1.9.2.16)Gecko/20110323 Ubuntu/10.10(maverick)Firefox/3.6.16」,但我無法弄清楚console如何重新申報。你有什麼想法?以下是我如何聲明控制檯:

if (typeof console == "undefined") { 
    var console = { 
    log: function() { 
    } 
    }; 
} 

回答

4

您不能有條件地聲明變量。在執行任何代碼之前,將聲明解析並添加爲激活對象的屬性。您的代碼就相當於:

var console; 
if (typeof console == "undefined") { 
    console = { 
    log: function() { 
    } 
    }; 
} 

這也被稱爲「衝頂」,「懸掛」在函數的頂部或高於任何其他代碼(不是一個學期,我很喜歡的)的聲明是有效的。

在同一個函數或範圍中多次聲明一個變量是無害的,但它表示可能會誤解範圍(例如期待塊範圍)或意外重用標識符。

請編輯此確認或否認這一部分:

做是的方式重新definig window.console:

if (typeof window.console == "undefined") { 
    window.console = { 
    log: function() { 
    } 
    }; 
} 
+0

+1至於解決,你應該檢查並改爲設置'window.console'。 – deceze 2011-04-21 06:29:46

+0

本論壇不針對對話,僅針對問題和答案。編輯其他人的帖子是爲了模擬Usenet上可能用好的新聞閱讀器進行的線索對話,這對我來說似乎並不合適。如果你想知道將屬性添加到全局/窗口對象的最佳方法,我建議你用一個合適的主題提出另一個問題。答案取決於上下文。 – RobG 2011-04-25 13:42:58