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

yizhihongxing

让我来给你详细讲解一下“面试官常问之说说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的值不变,防止出现意外的修改。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:面试官常问之说说js中var、let、const的区别 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • js 性能优化之算法和流程控制

    JS性能优化之算法和流程控制 优化JS代码是提升Web应用性能的重要手段之一。在处理算法和流程控制方面,我们可以进行一些优化,来使我们的代码更高效。 算法优化 选择合适的数据结构 在处理大量数据的情况下,选择合适的数据结构非常重要。例如,在需要快速查找大量数据的情况下,应选择哈希表等查找性能高效的数据结构。在需要频繁添加或删除数据的情况下,应选择链表等插入和…

    JavaScript 2023年5月27日
    00
  • js实现抽奖的两种方法

    下面给出JS实现抽奖的两种方法的完整攻略。 方法一:用Math.random()生成随机数 1.创建一个数组,用来存储奖品种类和对应的中奖概率,例如: let awards = [ {name: ‘一等奖’, probability: 0.1}, {name: ‘二等奖’, probability: 0.2}, {name: ‘三等奖’, probabili…

    JavaScript 2023年6月11日
    00
  • js parentElement和offsetParent之间的区别

    js parentElement和offsetParent之间的区别 在使用 JavaScript 操作 DOM(文档对象模型)时,我们经常会遇到 parentElement 和 offsetParent 这两个属性,这两个属性都可以用来访问一个元素的父级元素。虽然它们看起来很相似,但它们有着不同的工作方式和用途。 parentElement parentE…

    JavaScript 2023年6月10日
    00
  • 不使用script导入js文件的几种方法

    当我们需要在网页中引入JS文件时,一般会使用<script>标签来实现,但有时我们也需要不使用<script>标签来实现,以下是几种不使用<script>标签导入JS文件的方法: 1. 使用Link标签: 我们可以使用<link>标签的href属性来链接JS文件,这种方式一般用于引入CSS文件,但是也可以用于J…

    JavaScript 2023年5月27日
    00
  • js 剪切板的用法(clipboardData.setData)与js match函数介绍

    下面开始介绍“js 剪切板的用法(clipboardData.setData)与js match函数介绍”: js 剪切板的用法(clipboardData.setData) 简介 剪切板(clipboard)是操作系统提供的一种机制,用于临时存储某个程序的数据,以供其他程序使用。在 web 应用中,也可以使用剪切板来实现数据的复制和粘贴。 在 JavaSc…

    JavaScript 2023年6月10日
    00
  • TypeScript联合类型,交叉类型和类型保护

    让我来为你详细讲解一下 TypeScript 的联合类型、交叉类型和类型保护攻略。 联合类型 联合类型(Union Types)表示取值可以为多种类型中的一种。用竖线 | 连接多个类型,例如: let value: string | number; value = ‘hello’; // 字符串 value = 123; // 数字 上面的代码中,变量 va…

    JavaScript 2023年5月27日
    00
  • 配合AJAX天气预报的webService 之asp

    下面是配合AJAX天气预报的webService之ASP的完整攻略: 1. 确认webService接口地址 首先,需要确定使用的天气预报webService接口地址。例如,我们使用的是中国天气网的API。在此基础上,可以根据实际需求自行寻找合适的接口。 2. 创建ASP页面 接着,创建一个名为“weather.asp”的ASP页面,用于提供与天气预报相关的…

    JavaScript 2023年6月11日
    00
  • javascript 玩转Date对象(实例讲解)

    Javascript 玩转 Date 对象(实例讲解) 日期和时间在 Javascript 中有着非常重要的地位,而 Date 对象则是用于处理日期和时间的核心对象。在本攻略中,我们将介绍 Date 对象的常用的方法和属性,并提供一些在实际项目中可能会用到的示例供参考。 初始化 Date 对象 在创建 Date 对象时,可以使用以下语句: var date …

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部