为什么我们必须定义“var console = window.console;”在某些情况下(如运行测试)?

时间:2013-06-26 15:36:21

标签: javascript phantomjs

我认为它可能与使用PhantomJS的测试有关,测试将因某些console.log而失败,我需要添加一行:

var console = window.console;

位于IFFE的顶部,例如:

(function() {
    var console = window.console;

    // ...
}());

这有点奇怪。首先,不是基于webkit的PhatomJS,我认为consoleconsole.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;需要它以及它有什么帮助解决?

1 个答案:

答案 0 :(得分:0)

在定义window.console的情况下,该行无效。

如果window.console 未定义,则将console定义为函数范围内的有效标识符。如果没有该行,标识符console将产生ReferenceError,但window.console只会让您undefined

因此,如果它不是现存标识符,则该行定义console,或者在它是现存标识符的情况下,它使用全局console的值。

因此,我们可以得出结论,在您的测试环境中,window.console未定义。