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

标签 javascript phantomjs

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

var console = window.console;

位于 IFFE 内部的顶部,例如:

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

    // ...
}());

这有点奇怪。首先,PhatomJS不是基于webkit的,我以为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; 行,它能帮助解决什么问题?

最佳答案

如果定义了window.console,则该行不起作用。

如果 window.console 未定义,则将 console 定义为函数作用域内的有效标识符。如果没有该行,标识符 console 将产生一个 ReferenceError,但 window.console 只是让您undefined

因此,如果该行还不是现有标识符,则该行定义控制台,或者如果它是一个标识符,则它使用全局控制台的值现存的标识符。

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

关于javascript - 为什么在某些情况下(例如运行测试)我们必须定义 "var console = window.console;"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17324455/

相关文章:

javascript - 将我的 CheckBox 列表值发送到 Json

javascript - ASP.NET MVC 3 和 Google map API

python - PhantomJS 不通过 Selenium 加载 mobile.twitter.com

javascript - 如果 phantom 卡在 page.open 上,如何退出它(带有示例)

angularjs - 测试关闭 Protractor 间歇性失败的模式

javascript - 为什么我在异步加载 Google map 时收到 'google is not defined'?

javascript - 如何在 owl-carousel 幻灯片中找到视频元素,然后仅为该特定幻灯片设置 owl-carousel 控件的 css

javascript - 如何将Javascript添加到simple_form?

javascript - 带有外部脚本的 PhantomJS Node

javascript - 显示单元测试的图表