San*_*osh 32 javascript console.log
刚接受采访.第一个问题问我是什么console.log().我非常自信地回答.再次,
第二个问题是,window.console.log()和之间有什么区别console.log().我无言以对.尝试在Google和Stack Overflow中搜索.我没有找到这样有用的帖子来理解它们之间的区别.
任何想法都非常感谢.
Sci*_*ter 38
在普通的浏览器环境中,没有区别.console是一个全局变量,所有全局变量都是window对象的属性.
console.log(console.log==window.console.log) // trueRun Code Online (Sandbox Code Playgroud)
有一些注意事项,例如未在浏览器中运行,或者是否已重新分配控制台变量.TJ Crowder很好地解释了这一点.
T.J*_*der 35
如果您的意思是在默认的浏览器JavaScript环境中,实际上没有提供 window,console也没有被镜像或重新分配.
在默认浏览器JavaScript环境中,window是一个引用全局对象的全局对象,它也是窗口对象.全局对象保持最全局作为属性(它使用的是所有的,但在ES2015,改变;可以通过创建全局let,const或class不是全局对象的属性).但是在大多数非浏览器环境中都不是这样(例如,NodeJS,global而不是使用window),甚至在某些非默认的浏览器环境中(例如Web工作者的环境,window因为他们无法访问窗口).因此,在window未定义的环境中window.console.log,console.log如果环境提供全局,则会失败console.
为了理解这些差异,让我们通过以下方式工作:
console.log(...) 手段:
console从当前执行上下文开始搜索标识符的绑定,然后搜索下一个绑定,然后搜索下一个绑定,直到它在全局范围内找到它.log在生成的对象上查找属性.window.console.log(...) 手段:
window从当前执行上下文开始搜索标识符的绑定,然后搜索下一个绑定,然后搜索下一个绑定,直到它在全局范围内找到它.console在生成的对象上查找属性.log在生成的对象上查找属性.例如,这里有一个console被遮蔽的例子,因此console.log失败而window.console.log工作:
function foo() {
var console = 42;
try {
console.log("You WON'T see this.");
} catch (e) {
}
try {
window.console.log("You WILL see this.");
} catch (e) {
}
}
foo();Run Code Online (Sandbox Code Playgroud)