对var的新笔记

时间:2023-11-19 18:07:44

今天看阮老师的ES6入门时,看见一个对我来说从没想到过的var赋值变量导致的错误,故记录一下

var tmp = new Date();

function f() {
  console.log(tmp);
  if (false) {
    var tmp = 'hello world';
  }
}

f(); // undefined

这种情况的起因是变量提升

我的理解是在该函数调用时,因为使用var创建的变量,作用范围只有全局与函数两种,故引擎先把所有使用var创建的变量进行创建,但并不进行赋值,创建完所有var创建的变量后,程序再从函数内第一行代码开始运行。

因为内部创建了和外部相同的变量名,内部变量便在函数内覆盖了外部变量,而输出该变量时,该变量还未赋值,便输出了undefined。

而使用let时,let只会在if下的代码块中创建局部变量tmp,未在if代码块中的代码则还是可以使用外部的tmp变量。

使用开发者工具测试了一下,和所想暂时未有冲突。

对var的新笔记