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