JavaScript变量提升不像Scratchpad中预期的行为



我遵循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,因此也许在您的情况下执行两次。

相关内容

  • 没有找到相关文章

最新更新