让我来给你详细讲解一下“面试官常问之说说js中var、let、const的区别”。
在JavaScript中,变量声明有三种方式:var
、let
和const
。它们之间的区别主要在于作用域、值的可变性和赋值方式。
var
: 可以重复赋值,不存在块级作用域,声明的变量会被提升到所在函数的顶部。let
: 允许块级作用域,不能重复声明,可以更改已经赋值的值,在声明前调用会抛出错误。const
: 声明后不能被修改,也要遵循块级作用域规则,不能重复声明,必须赋初值。var
可以多次赋值,一个变量可以在同一作用域中被多次声明,后面的声明会覆盖前面的声明。
var a = 1;
var a = 2;
console.log(a); // 输出2
而let
和const
则不能在同一作用域中重复声明同一个变量。
let b = 1;
let b = 2; // 报错:Uncaught SyntaxError: Identifier 'b' has already been declared
var
声明的变量,它的作用域是当前的函数作用域,而不是块级作用域。
function func() {
for (var i = 0; i < 3; i++) {
console.log(i);
}
console.log("after loop: " + i); //输出 3
}
在上述代码中,循环内部的变量i虽然在循环结束后不可用,但是它的值却可以在循环结束后被输出。
而let
和const
声明的变量,只在当前块级作用域内有效。
function func() {
for (let i = 0; i < 3; i++) {
console.log(i);
}
console.log("after loop:" + i); // 报错:Uncaught ReferenceError: i is not defined
}
在上述代码中,用let
声明的变量i只在循环内部有效,所以在循环结束后,i就无法被识别。
当用const
声明时必须在同一行进行赋值,赋初值后不可更改。
const c = 1;
c = 2; // 报错:Uncaught TypeError: Assignment to constant variable.
而用let
和var
声明时,如果不赋初值会被默认声明为undefined。
let d;
var e;
console.log(d); // undefined
console.log(e); // undefined
let
来改进循环for (let i = 0; i < 3; i++) {
console.log(i);
}
console.log("after loop: " + i); // 报错:Uncaught ReferenceError: i is not defined
在这个示例中,使用了let
来声明i变量,所以在循环结束后,i变量就无法被使用了。
const
声明常量const PI = 3.14159;
PI = 3.14; // 报错:Uncaught TypeError: Assignment to constant variable.
console.log(PI);
在这个示例中,用const
声明了PI这个常量,如果尝试改变PI的值,就会抛出一个类型错误的异常。这样可以确保PI的值不变,防止出现意外的修改。
本文链接:http://task.lmcjl.com/news/9789.html