Javascript 为什么我们要定义“一个”呢;var console=window.console&引用;在某些情况下(例如运行测试)?
我认为这可能与使用PhantomJS的测试有关,测试将由于一些Javascript 为什么我们要定义“一个”呢;var console=window.console&引用;在某些情况下(例如运行测试)?,javascript,phantomjs,Javascript,Phantomjs,我认为这可能与使用PhantomJS的测试有关,测试将由于一些console.log而失败,我需要写一行: var console = window.console; 在IFFE内部的顶部,例如: (function() { var console = window.console; // ... }()); 这有点奇怪。首先,PhatomJS不是基于webkit吗?我认为console和console.log都是定义的 第二,我认为如果定义了window.console,
console.log
而失败,我需要写一行:
var console = window.console;
在IFFE内部的顶部,例如:
(function() {
var console = window.console;
// ...
}());
这有点奇怪。首先,PhatomJS不是基于webkit吗?我认为console
和console.log
都是定义的
第二,我认为如果定义了window.console
,我们使用var console=window.console设置它
那么实际上,如果我们没有定义本地控制台
,当遇到控制台
时,浏览器将自动解析为窗口。控制台
,因为全局环境是窗口
我认为如果console.log(…)
语句被window.console.log(…)
替换,那么var console=window.console代码>将不需要
那么为什么行var console=window.console需要代码>以及它有助于解决什么问题?在定义了window.console
的情况下,该行无效
如果未定义window.console
,则将console
定义为功能范围内的有效标识符。如果没有该行,标识符console
将产生一个ReferenceError,但是window.console
只会让您未定义
因此,如果该行还不是现有标识符,则该行定义console
;如果该行是现有标识符,则该行使用全局console
的值
因此,我们可以得出结论,在您的测试环境中,window.console
没有定义。它会说console
没有定义并且测试失败,但是为什么console.log(123)
在没有var console=window.console的情况下会失败代码>需要澄清的是:控制台输出实际工作吗?console.log
是否也在任何地方定义?console.log()
不起作用,除非使用window.console.log()
,或者使用var console=window.console代码>第一个@動靜能量 有趣的在这种情况下,window
不能是此处的全局对象。您可以使用var myglobal=Function('returnthis')()检查全局对象是什么代码>(),并比较myglobal==window
。您不能只console.log(this)
或选中this==window