window.scope = 'global'
Object.prototype.scope = 'object proto'
console.log(scope);
我正在编写上面的简单脚本来测试范围,但我在chrome dev工具和jsfiddle中得到了不同的结果。
为什么?
答案 0 :(得分:1)
如果我将您的代码粘贴到新的HTML文档中并在Chrome中查看,则在加载页面时会将global
打印到控制台。
当您将代码直接粘贴到DevTools控制台 时,您会得到:
object proto
undefined
这是因为DevTools实际评估的是以下脚本(在我的例子中):
with ((console && console._commandLineAPI) || {}) {
window.scope = 'global'
Object.prototype.scope = 'object proto'
console.log(scope);
}
因此,通过使用with
语句,console
被添加到当前作用域链中,将scope
变量绑定到它。由于您在访问scope
之前扩展了对象原型,因此在引用scope
(实际引用console.scope
时,您会看到操作的结果,这要归功于with
语句)。
两行输出的原因很明显:首先,执行console.log
,然后将消息打印到控制台上,然后DevTools为您提供表达式console.log
的结果 nothing (函数没有返回值)。
希望这能为你澄清一些事情。