2014-03-13 54 views
-1

我最近做了一個奇怪的問題,如果用我的代碼中,但做工精細,直接使用控制檯或使用window.console.log其中console.log不輸出任何東西。的console.log()不工作在所有瀏覽器

window.console.log(console); 
window.console.log(window.console); 
console.log("test1"); // (won't work) 
window.console.log("test2"); 

輸出繼電器:

enter image description here

如果我定義安慰自己的控制檯之前的代碼:

var console = window.console; 
window.console.log(console); 
window.console.log(window.console); 
console.log("test1"); 
window.console.log("test2"); 

輸出繼電器:

enter image description here


而奇怪的事情,如果我定義安慰自己後的代碼

window.console.log(console); 
window.console.log(window.console); 
console.log("test1"); 
window.console.log("test2"); 
var console = window.console; 

輸出繼電器:在回答之前

enter image description here

注:

  1. 這不是一個瀏覽器特定的問題,因爲每個瀏覽器的輸出都是一樣的(我檢查過chrome/firefox/safari/opera)。

  2. 它沒有被覆蓋,因爲日誌console & window.console返回相同的確切對象(請參見屏幕截圖)。

+0

如果發生這種情況,您可能做錯了事。我似乎無法重現它,所以你的代碼必須覆蓋一些東西,或者在窗口出於某種原因而不是「全局」範圍等等的範圍中是最奇怪的。 – adeneo

+0

以下是@adeneo所說的,你得到了什麼你在你的控制檯輸入'this'? – DontVoteMeDown

+0

'window.console.log(console.log.toString());'show? – epascarello

回答

0

這是JavaScript的一個驚人的功能之一。 var指令在預執行階段處理。所以這個代碼:

function foo() { 
    window.console.log(console); 
    var console = window.console; 
    window.console.log(console); 
} 

等同於:

function foo() { 
    var console; 
    window.console.log(console); // console is local variable and undefined 
    console = window.console; 
    window.console.log(console); 
} 
-1

我找到了原因。在我們的咕嚕醜化功能(咕嚕-的contrib-醜化),我們使用drop_console選項壓縮:

uglify: { 
    options: { 
     compress: { 
      drop_console: true 
     } 
    }, 
// ... 

這明顯下降的console任何外觀,但奇怪的是不降window.console

相關問題