首页 > js > js中const、let、var的区别

js中const、let、var的区别

作者:bin

1、const
const往往会被人解释为常量,即定义了不能改变,其实这是不对的。
实际上是const定义的内存地址不能改变,值是可以改变的,这一点我们可以在如下看出来:

const data = [];
data = [] // 报错,不能改变原内存地址
data.push(1); //正常,可以改变他的值

//如下情况会报错,让人以为const定义的值不能被改变

const data = 1;
data = 2;

2、var
通过var定义的变量,作用域是整个封闭函数,是全域的

var tmp = 123;
if (true) {
   tmp = 'abc'; //正常
}

通过var定义变量时,执行js预编译会将变量声明提前到作用域最头部:

var 的情况
console.log(foo); // 输出undefined
var foo = 2;

相当于

var foo; //声明且初始化为undefined
console.log(foo);
foo=2;

如果这样,就会报错,因为整个作用域都未定义foo

console.log(foo);

3、let
let是块级作用域,函数内部使用let定义后,对函数外部无影响。
下面2段代码可以明显看出var和let段区别,一个是块级,一个是整个封闭函数级

for (let i = 0; i < 10; i++) {
   // ...
}
console.log(i); //报错,let仅限定于括号内使用
for (var i = 0; i < 10; i++) {
   // ...
}
console.log(i); //正常

下面虽然在外面声明了tmp,但在if但作用域中声明了let,那么他就绑定了这个作用域,在他声明之前调用就会报错。

var tmp = 123;
if (true) {
    tmp = 'abc'; // ReferenceError
   let tmp;
}

这样就可以了

var tmp = 123;
if (true) {
     let tmp;
     tmp = 'abc'; // ReferenceError
     console.log(tmp);
}
console.log(tmp);

您必须 [ 登录 ] 才能发表留言!