我认为这可能与使用 PhantomJS 的测试有关,由于某些 console.log
,测试会失败,我需要放一行:
var console = window.console;
位于 IFFE 内部的顶部,例如:
(function() {
var console = window.console;
// ...
}());
这有点奇怪。首先,PhatomJS不是基于webkit的,我以为console
和console.log
都定义了。
其次,我认为如果定义了 window.console
,并且我们使用 var console = window.console;
设置它,那么实际上,如果我们没有定义本地console
,当遇到console
时,浏览器会自动解析为window.console
,因为全局环境是window
?
我认为如果将 console.log(...)
语句替换为 window.console.log(...)
则 var console = window.console;
将不再需要。
那么为什么需要 var console = window.console;
行,它能帮助解决什么问题?
最佳答案
如果定义了window.console
,则该行不起作用。
如果 window.console
未定义,则将 console
定义为函数作用域内的有效标识符。如果没有该行,标识符 console
将产生一个 ReferenceError,但 window.console
只是让您undefined
。
因此,如果该行还不是现有标识符,则该行定义控制台,或者如果它是一个标识符,则它使用全局控制台的值现存的标识符。
因此,我们可以得出结论,在您的测试环境中,window.console
未定义。
关于javascript - 为什么在某些情况下(例如运行测试)我们必须定义 "var console = window.console;"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17324455/