Javascript 为什么相同的代码在JSFIDLE中给出不同的结果
我正在编写上面的简单脚本来测试范围,但是我在chrome开发工具和JSFIDLE中得到了不同的结果Javascript 为什么相同的代码在JSFIDLE中给出不同的结果,javascript,Javascript,我正在编写上面的简单脚本来测试范围,但是我在chrome开发工具和JSFIDLE中得到了不同的结果 铬:“对象原型” jsfiddle:'全球' 为什么?如果我将您的代码粘贴到新的HTML文档中并在Chrome中查看,则在加载页面时会将global打印到控制台 当您将代码直接粘贴到DevTools控制台时,您会得到: window.scope = 'global' Object.prototype.scope = 'object proto' console.log(scope); 这是
- 铬:“对象原型”李>
- jsfiddle:'全球'李>
为什么?如果我将您的代码粘贴到新的HTML文档中并在Chrome中查看,则在加载页面时会将
global
打印到控制台
当您将代码直接粘贴到DevTools控制台时,您会得到:
window.scope = 'global'
Object.prototype.scope = 'object proto'
console.log(scope);
这是因为DevTools实际计算的是以下脚本(在我的例子中):
因此,通过使用with
语句,将控制台
添加到当前作用域链中,该作用域链将作用域
变量绑定到它。由于在访问范围
之前要扩展对象原型,因此在引用范围
时可以看到操作的结果(这实际上是指控制台.scope
,这要感谢with
语句)
有两行输出的原因很明显:首先,执行console.log
,因此消息被打印到控制台上,然后DevTools会给出表达式console.log
的结果,该表达式为空(函数没有返回值)
希望这能为您澄清一些事情。有趣。但你真正想做的是什么?我假设您比使用可枚举属性扩展
Object.prototype
更清楚,这是一种思维实验……在任何情况下,您得到的结果(例如,您没有链接的小提琴,而不是开发工具)都是正确的结果。对于开发工具中偶尔出现的奇怪现象,我并不完全感到惊讶。
object proto
undefined
with ((console && console._commandLineAPI) || {}) {
window.scope = 'global'
Object.prototype.scope = 'object proto'
console.log(scope);
}