1

我认为这可能与使用 PhantomJS 的测试有关,测试会由于某些原因而失败console.log,我需要写一行:

var console = window.console;

在 IFFE 内部的顶部,例如:

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

    // ...
}());

这有点奇怪。首先,PhatomJS 是不是基于 webkit 的,和我想的一样consoleconsole.log都是定义的。

其次,我以为 ifwindow.console是定义的,其实我们是用var console = window.console;then 来设置的,如果我们没有定义 local console,当console遇到时,浏览器会自动解析到,window.console因为全局环境是window?

我认为如果console.log(...)语句被替换,window.console.log(...)那么var console = window.console;就不需要了。

那么为什么var console = window.console;需要这条线,它有助于解决什么问题?

4

1 回答 1

0

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

在未定义的情况下,定义window.console为函数范围内的有效标识符。如果没有该行,标识符会产生一个 ReferenceError,但只会得到你。consoleconsolewindow.consoleundefined

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

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

于 2013-06-26T15:44:07.160 回答