5
window.scope = 'global'
Object.prototype.scope = 'object proto'
console.log(scope);
我在上面写简单的脚本来测试范围,但我得到了不同的结果,铬开发工具和jsfiddle。为什么相同的代码给出了不同的结果jsfiddle
- 铬: '对象原';
- jsfiddle:'global';
为什么?
window.scope = 'global'
Object.prototype.scope = 'object proto'
console.log(scope);
我在上面写简单的脚本来测试范围,但我得到了不同的结果,铬开发工具和jsfiddle。为什么相同的代码给出了不同的结果jsfiddle
为什么?
如果我是你的代码粘贴到浏览器一个新的HTML文档,视图,我得到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
这是没什么的结果(函数没有返回值)。
希望能为您澄清一些事情。
有趣。但是你想要做的实际事情是什么?我假设你知道比使用可枚举属性扩展Object.prototype更好,这是一种思想实验。 –
无论如何,你得到的结果[在真实环境中](http:// jsbin .com/aniqurUh/1)(例如,像你没有链接的小提琴,而不是开发工具)是正确的结果。我并不完全惊讶于发现开发工具偶尔出现的奇怪现象。 –