Javascript 变量提升在 Scratchpad 中的行为不符合预期
Javascript Variable Hoisting not Behaving as Expected in Scratchpad
我正在关注 Mozilla 开发人员 Javascript 教程,并且有一个关于变量托管的部分。本教程在某一时刻提到使用 Firefox 的 Scratchpad 来编辑 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)
returnsfalse
。如果我 运行 console.log(x);
而不是它实际上 returns 3
。 console.log(myvar);
低于 returns,如预期未定义。
我很困惑这里应该发生什么,文档可能 incorrect/outdated 还是 Scratchpad 解释此代码的方式与标准不同 JavaScript,如果是,为什么?我尝试在 .js 文件中 运行,我得到了预期的结果。
在立即函数中,您重新声明了 myvar
变量:
(function() {
console.log(myvar); // undefined
var myvar = 'local value';
})();
因此 window
范围内的全局 myvar
变量将被提升,这就是它 returns undefined
在 console.log(myvar);
.[=21= 中的原因]
另一方面,如果您将其替换为 console.log(x);
,它将打印 3
,因为您尚未重新声明 x
变量。
您的问题:
并且对于第一个 console.log(x === undefined);
语句,只有当您 重新 执行它时,它才会 return false
,所以也许在您的情况下它被执行了两次。
我正在关注 Mozilla 开发人员 Javascript 教程,并且有一个关于变量托管的部分。本教程在某一时刻提到使用 Firefox 的 Scratchpad 来编辑 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)
returnsfalse
。如果我 运行 console.log(x);
而不是它实际上 returns 3
。 console.log(myvar);
低于 returns,如预期未定义。
我很困惑这里应该发生什么,文档可能 incorrect/outdated 还是 Scratchpad 解释此代码的方式与标准不同 JavaScript,如果是,为什么?我尝试在 .js 文件中 运行,我得到了预期的结果。
在立即函数中,您重新声明了 myvar
变量:
(function() {
console.log(myvar); // undefined
var myvar = 'local value';
})();
因此 window
范围内的全局 myvar
变量将被提升,这就是它 returns undefined
在 console.log(myvar);
.[=21= 中的原因]
另一方面,如果您将其替换为 console.log(x);
,它将打印 3
,因为您尚未重新声明 x
变量。
您的问题:
并且对于第一个 console.log(x === undefined);
语句,只有当您 重新 执行它时,它才会 return false
,所以也许在您的情况下它被执行了两次。