2017-10-21 95 views
1

爲什麼JavaScript變量在一些站點上正確打印,但在其他站點中未被定義?爲什麼JavaScript變量在某些站點上正確打印,但在其他站點中未被定義?

例如,在StackOverflow的網頁我可以這樣做:

let x = 'y'; 
console.log(x); // Outputs "y". 

但在其他一些網站的網頁,就像this Duolingo exerciseconsole.log檢查將失敗:

let x = 'y'; 
console.log(x); // Outputs "Undefined". 

從我」至今我讀過的內容與範圍有關。但是,我不清楚什麼類型的範圍,因爲幾乎總是我知道JavaScript中只有2個示波器:全局(文檔向下)和函數(也涵蓋函數的子函數)。

這似乎做第三範圍,窗口(窗口 - 向下),但我不清楚爲什麼我devtool控制檯不會自動覆蓋這個以及,上述文件和功能,在這些像Duolingo這樣的網頁,我遇到了這個問題。

無論如何要聲明變量,我試着把我的變量放在IIFEs中。它沒有幫助,所以我仍然在我遇到這個問題的網站中得到「未定義」的變量。例如:

的StackOverflow:

(()=>{ 
let x = 'y'; 
console.log(x); 
})(); // Outputs "y". 

聽歌練習:

(()=>{ 
let x = 'y'; 
console.log(x); 
})(); // Outputs "undefined". 

爲什麼有的網站輸出未定義的聲明時變量,什麼是最好的方法,你會說,以應付呢?

請在你的回答中解釋爲什麼只有在某些網站而不是其他網站,爲什麼我的IIFE嘗試失敗,如果我使用這個IIFE爲我的變量任意設置一個範圍。

作爲一名JS大一新生,我盡力說出了這個問題。對不起,如果聽起來不準確。

+0

很可能在該站點腳本中有'console.log'的搭配,以防止您使用它。像「控制檯」。日誌=功能(){/ *什麼也不做* /}' – charlietfl

+0

爲什麼會有人這樣做? – fayalikt

+0

也許爲了更難挖掘存儲的數據 – charlietfl

回答

4

棘手的問題。這是因爲它不是相同的console.log。當你在計算器如果打印

console.log 

你得到這樣的事情

ƒ log() { [native code] } 

我沒有調用(括號)打印功能定義,因爲我想看到的定義。如果你在聽歌同樣的事情,你得到

ƒ(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];(vt()||window.verbose)&&Function.prototype.apply.apply(t,[console,e])} 

這意味着該網頁覆蓋的console.log的定義是在JavaScript中有效。由於JS中的每個函數默認返回未定義,並且REPL(開發工具)將此輸出打印給您,所以您得到未定義的值。

相關問題