JavaScript之变量提升

JavaScript 变量的另一个不同寻常的地方是,你可以先使用变量稍后再声明变量而不会引发异常。这一概念称为变量提升;JavaScript 变量感觉上是被“提升”或移到了函数或语句的最前面。但是,提升后的变量将返回 undefined 值。因此在使用或引用某个变量之后进行声明和初始化操作,这个被提升的变量仍将返回 undefined 值。

/**
 * 例子1
 */
console.log(x === undefined); // true
var x = 3;
​
​
/**
 * 例子2
 */
// will return a value of undefined
var myvar = "my value";
​
(function() {
  console.log(myvar); // undefined
  var myvar = "local value";
})();

上面的例子,也可写作:

/**
 * 例子1
 */
var x;
console.log(x === undefined); // true
x = 3;
​
/**
 * 例子2
 */
var myvar = "my value";
​
(function() {
  var myvar;
  console.log(myvar); // undefined
  myvar = "local value";
})();

由于存在变量提升,一个函数中所有的var语句应尽可能地放在接近函数顶部的地方。这个习惯将大大提升代码的清晰度。

在 ECMAScript 6 中,let(const)同样会被提升变量到代码块的顶部但是不会被赋予初始值。在变量声明之前引用这个变量,将抛出引用错误(ReferenceError)。这个变量将从代码块一开始的时候就处在一个“暂时性死区”,直到这个变量被声明为止。

console.log(x); // ReferenceError
let x = 3;

© 版权声明
THE END
点赞8 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容