关键词

面试官常问之说说js中var、let、const的区别

让我来给你详细讲解一下“面试官常问之说说js中var、let、const的区别”。

区别概述

在JavaScript中,变量声明有三种方式:varletconst。它们之间的区别主要在于作用域、值的可变性和赋值方式。

  • var: 可以重复赋值,不存在块级作用域,声明的变量会被提升到所在函数的顶部。
  • let: 允许块级作用域,不能重复声明,可以更改已经赋值的值,在声明前调用会抛出错误。
  • const: 声明后不能被修改,也要遵循块级作用域规则,不能重复声明,必须赋初值。

区别细讲

  1. 变量重复赋值

var可以多次赋值,一个变量可以在同一作用域中被多次声明,后面的声明会覆盖前面的声明。

var a = 1;
var a = 2;
console.log(a); // 输出2

letconst则不能在同一作用域中重复声明同一个变量。

let b = 1;
let b = 2; // 报错:Uncaught SyntaxError: Identifier 'b' has already been declared
  1. 变量作用域

var声明的变量,它的作用域是当前的函数作用域,而不是块级作用域。

function func() {
  for (var i = 0; i < 3; i++) {
    console.log(i);
  }
  console.log("after loop: " + i); //输出 3
}

在上述代码中,循环内部的变量i虽然在循环结束后不可用,但是它的值却可以在循环结束后被输出。

letconst声明的变量,只在当前块级作用域内有效。

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就无法被识别。

  1. 声明变量时的赋值

当用const声明时必须在同一行进行赋值,赋初值后不可更改。

const c = 1;
c = 2; // 报错:Uncaught TypeError: Assignment to constant variable.

而用letvar声明时,如果不赋初值会被默认声明为undefined。

let d;
var e;
console.log(d); // undefined
console.log(e); // undefined

示例说明

  1. 使用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变量就无法被使用了。

  1. 使用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

展开阅读全文