ES6面试题——var,let,const的区别

发布于:2024-07-03 ⋅ 阅读:(118) ⋅ 点赞:(0)

它们都是用来声明变量的。

1. var具有变量提升机制,let和const没有

/* var有变量提升机制 */
<script>
console.log(str);  // 打印出undefined
var str = "你好";
</script>

/* let没有变量提升机制 */
<script>
console.log(str);  // 会报错Cannot access 'str' before initialization
let str = "你好";
</script>

/* const没有变量提升机制 */
<script>
console.log(str);  // 会报错Cannot access 'str' before initialization
const str = "你好";
</script>

2. var可以多次声明同一个变量,let和const不可以。

/* var可以多次声明同一个变量 */
<script>
var str = 1;
var str = 2;
console.log(str); // 打印输出2
</script>

/* let不可以多次声明同一个变量 */
<script>
let str = 1;
let str = 2;
console.log(str); // 会报错:Identifier 'str' has already been declared
</script>

/* const不可以多次声明同一个变量 */
<script>
const str = 1;
const str = 2;
console.log(str); // 会报错:Identifier 'str' has already been declared
</script>

3. var,let是用来声明变量的,const是用来声明常量的

/* var是用来声明变量的,它的值可以改变 */
<script>
var str = '1';
str = 2;
console.log( str ); // 打印输出2
</script>

/* let是用来声明变量的,它的值可以改变 */
<script>
let str = 2;
str = "你好";
console.log( str ); // 打印输出:你好
</script>

/* const是用来声明常量的,它的值不可以改变 */
<script>
const obj = { a:1 };
obj = "123";
console.log( str ); // 会报错:Assignment to constant variable.
</script>

/* 对象里面的某个属性是可以改的 */
<script>
const obj = { a:1 };
obj.a = "123";
console.log( obj ); // 打印出:{a: '123'}
</script>

4. var声明的变量没有自身的作用域,let和const声明的变量有自身的作用域

/* var声明的变量没有自身的作用域 */
<script>
if( true ) {
  var num = 123
}
console.log( num ); // 打印出:123
</script>
/* let声明的变量有自身的作用域 */
<script>
if( true ) {
  let num = 123
}
console.log( num ); // 会报错:num is not defined
</script>
/* const声明的变量有自身的作用域 */
<script>
if( true ) {
  const num = 123
}
console.log( num ); // 会报错:num is not defined
</script>

联系 

<script>
function demo(){
  var n = 2;
  if( true ){
    var n = 1;
  }
  console.log( n ); // 此时打印出:1
}
demo();
</script>

<script>
function demo(){
  let n = 2;
  if( true ){
    let n = 1;
  }
  console.log( n ); // 此时打印出:2
}
demo();
</script>

<script>
function demo(){
  const n = 2;
  if( true ){
    const n = 1;
  }
  console.log( n ); // 此时打印出:2
}
demo();
</script>