首页 > 网站 > WEB开发 > 正文

var、let、const小解

2024-04-27 15:14:26
字体:
来源:转载
供稿:网友

var声明的是全局变量,let只作用在块级作用域内,const和let作用域相同但是一般只允许赋值一次。


let 对比 var

let的作用域是块,而var的作用域是函数

var a = 5;var b = 10;if (a === 5) { let a = 4; // The scope is inside the if-block var b = 1; // The scope is inside the function console.log(a); // 4 console.log(b); // 1} console.log(a); // 5console.log(b); // 1

let 在循环中

可以用 let 来代替 var ,在 for 定义块中使用块级变量.

for (let i = 0; i < 10; i++) { console.log(i); // 0, 1, 2, 3, 4 ... 9}console.log(i); // i is not defined

let 的暂存死区与错误

在同一个函数或同一个作用域中用let重复定义一个变量将引起

if (x) { let foo; let foo; // TypeError thrown.}

在 ECMAScript 2015中, let 将会提升这个变量到语句块的顶部。然而,在这个语句块中,在变量声明之前引用这个变量会导致一个 ReferenceError的结果, 因为let变量 在”暂存死区” (从块的开始到声明这段).

function do_something() { console.log(foo); // ReferenceError let foo = 2;}

另外一个var带来的不合理场景就是用来计数的循环变量泄露为全局变量,看下面的例子:

var a = [];for (var i = 0; i < 10; i++) { a[i] = function () { console.log(i); };}a[6](); // 10

上面代码中,变量i是var声明的,在全局范围内都有效。所以每一次循环,新的i值都会覆盖旧值,导致最后输出的是最后一轮的i的值。而使用let则不会出现这个问题。

var a = [];for (let i = 0; i < 10; i++) { a[i] = function () { console.log(i); };}a[6](); // 6

const 声明创建一个只读的常量。这不意味着常量指向的值不可变,而是变量标识符的值只能赋值一次。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表