我遵循Mozilla开发人员JavaScript教程,并且在变量托管上有一个段。该教程在某一时刻提到了使用Firefox的刮擦板,以编辑JavaScript以快速保存并查看代码运行。
我使用的代码(从教程复制粘贴)是:
/**
* Example 1
*/
console.log(x === undefined); // true
var x = 3;
/**
* Example 2
*/
// will return a value of undefined
var myvar = 'my value';
(function() {
console.log(myvar); // undefined
var myvar = 'local value';
})();
但是console.log(x === undefined)
返回false
。而且,如果我运行console.log(x);
,则实际上返回3
。下面的console.log(myvar);
返回未定义的未定义。
我很困惑,因为这里应该发生的事情,文档可能不正确/过时,还是ScratchPad与标准JavaScript的解释不同,如果是这样,为什么?我尝试在.js文件中运行,并根据预期获得结果。
在即时函数中,您 re 在:
中声明myvar
变量 (function() {
console.log(myvar); // undefined
var myvar = 'local value';
})();
因此,将悬挂来自window
范围的全局myvar
变量,这就是为什么它返回console.log(myvar);
中的undefined
。
另一方面,如果用console.log(x);
替换它,它将打印3
,因为您尚未重新计算x
变量。
您的问题:
对于第一个console.log(x === undefined);
语句,仅当您 re 执行它时才返回false
,因此也许在您的情况下执行两次。