Javascript 为什么相同的代码在JSFIDLE中给出不同的结果

Javascript 为什么相同的代码在JSFIDLE中给出不同的结果,javascript,Javascript,我正在编写上面的简单脚本来测试范围,但是我在chrome开发工具和JSFIDLE中得到了不同的结果 铬:“对象原型” jsfiddle:'全球' 为什么?如果我将您的代码粘贴到新的HTML文档中并在Chrome中查看,则在加载页面时会将global打印到控制台 当您将代码直接粘贴到DevTools控制台时,您会得到: window.scope = 'global' Object.prototype.scope = 'object proto' console.log(scope); 这是

我正在编写上面的简单脚本来测试范围,但是我在chrome开发工具和JSFIDLE中得到了不同的结果

  • 铬:“对象原型”
  • 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);
}