JavaScript三大变量声明详析

yizhihongxing

JavaScript三大变量声明详析

在JavaScript中,我们经常需要声明变量来存储和操作数据。常见的变量声明有三种:varletconst。本文将详细讲解这三种变量声明的特点和使用方法。

var

var是ES5标准引入的变量声明关键字。使用var声明的变量拥有函数作用域(function scope),即在函数中声明的变量只在该函数内部有效。如果在函数外部调用var声明的变量,会得到undefined的结果。

function foo() {
  var a = 1;
}
foo();
console.log(a); // 报错:a未定义

var的特性还包括声明提升(hoisting),即在函数内部无论在哪里声明var变量,该变量都会被视为在函数作用域顶部声明,因此可以在声明前使用该变量。

function foo() {
  console.log(a); // 输出undefined
  var a = 1;
}
foo();

值得注意的是,在var声明的变量在声明前访问时,会返回undefined,这是因为在声明前该变量已经存在,但是还未被赋值。所以,虽然变量声明会被提升,但是赋值操作仍然是按照代码中出现的先后顺序执行的。

let

let是ES6标准引入的块级作用域(block scope)变量声明关键字。块级作用域指的是在代码块(由花括号包裹的语句序列)内部声明的变量,只在该代码块内有效。与var不同的是,let不存在声明提升,所以必须先声明再使用,否则会抛出ReferenceError错误。

function foo() {
  console.log(a); // 报错:a未定义
  let a = 1;
}
foo();

let变量还有一个非常重要的特性,就是允许在同一作用域内重复声明变量。这是因为每次声明的let变量都是一个新的变量,不会影响前面已经声明的同名变量。

function foo() {
  let a = 1;
  let a = 2; // 合法
  console.log(a); // 输出2
}
foo();

但是,在let声明变量前访问该变量,同样会抛出ReferenceError错误,这与var是一致的。

const

const也是ES6标准引入的块级作用域变量声明关键字。与let类似,const声明的变量也是块级作用域的,不存在声明提升的情况。但是,与letvar不同的是,const是一个常量,一旦声明就不能更改其值。

function foo() {
  const a = 1;
  a = 2; // 报错:Assignment to constant variable.
}
foo();

但是,如果使用const声明的变量是一个对象或数组,虽然不能对该变量重新赋值,但是可以修改该变量所引用的对象或数组的属性或元素。

function foo() {
  const obj = { a: 1 };
  obj.b = 2; // 合法
  console.log(obj); // 输出{ a: 1, b: 2 }
}
foo();

示例1

for (var i = 0; i < 5; i++) {
  setTimeout(function() {
    console.log(i);
  }, 1000);
}

在上面的示例中,使用var声明的i变量拥有函数作用域,即在整个for循环中只有一个变量i,循环中定义的多个setTimeout共享同一个i变量。由于setTimeout是一个异步函数,代码执行到setTimeout时,for循环已经结束,此时i的值为5。因此,无论循环执行了多少次,最终输出的结果都是5。

for (let i = 0; i < 5; i++) {
  setTimeout(function() {
    console.log(i);
  }, 1000);
}

在上面的示例中,使用let声明的i变量拥有块级作用域,循环中定义的多个setTimeout都有各自的i变量。同时,由于let不存在声明提升,所以各个setTimeout函数在执行时,所引用的i变量都能正确地取到循环迭代中的当前值。因此,输出的结果是0、1、2、3、4。

示例2

const obj = { a: 1 };
obj.b = 2;
console.log(obj); // 输出{ a: 1, b: 2 }
obj = { c: 3 }; // 报错:Assignment to constant variable.

在上面的示例中,首先使用const声明了一个对象obj,然后修改了该对象的属性值,但是并没有对该变量重新赋值。这是合法的,因为const只是保证变量所引用的对象不会改变,而不是保证该对象的属性不能被修改。

然后,尝试对obj重新赋值,会得到一个Assignment to constant variable错误。这是因为const声明的变量是一个常量,一旦声明就不能更改其值。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript三大变量声明详析 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • 详解JavaScript对象转原始值

    回答: 1. JavaScript对象转原始值 在JavaScript中,当一个对象被转换成原始类型时,会调用该对象的valueOf()和toString()方法。如果这两个方法都不存在或没有返回原始值,则会抛出TypeError异常。 1.1 valueOf()方法 对于大多数JavaScript对象,valueOf()方法会返回对象本身。但是对于包装对象…

    JavaScript 2023年5月27日
    00
  • 微信小程序 跳转方式总结

    下面是我对“微信小程序跳转方式总结”的详细讲解。 一、前言 在微信小程序中,跳转是一项非常重要的功能。跳转可以实现页面之间的连接和相互切换,从而提升用户体验和页面间的互动性。同时,在实现跳转的过程中也需要了解一些高级技巧,以方便开发出更加完善的功能。 二、跳转方式 微信小程序支持多种跳转方式,此处将对其进行总结。以下是常用跳转方式以及如何实现它们。 1、页面…

    JavaScript 2023年6月11日
    00
  • IE浏览器不支持getElementsByClassName的解决方法

    IE浏览器不支持 getElementsByClassName 方法,而该方法可以非常方便地获取文档中指定 class 名称的元素集合。在解决这个问题之前,先简要了解下 getElementsByClassName 方法的用法。 getElementsByClassName 方法 document.getElementsByClassName(classna…

    JavaScript 2023年6月11日
    00
  • element-ui表格合并span-method的实现方法

    下面是”element-ui表格合并span-method的实现方法 “的完整攻略。 1. 简介 在使用 Element UI 表格组件时,经常遇到需要对表格进行合并单元格的操作。Element UI 表格提供了 span-method 方法来实现单元格合并,可以按行或列进行合并。span-method 方法的作用是在表格初始渲染和数据更新时对单元格进行合并…

    JavaScript 2023年6月10日
    00
  • Vue.js 2.0学习教程之从基础到组件详解

    首先,本文将介绍一份针对Vue.js 2.0的学习教程,包括从基础开始,逐步介绍Vue.js的概念和用法,最终深入到Vue.js组件的详细讲解。 一、Vue.js基础 1.1 Vue.js的基本概念和语法 在Vue.js中,最核心的概念是“响应式”,通过将对象代理到Vue实例上,使得当对象改变时,Vue实例能够监听到并动态更新相应的视图。另外,Vue.js还…

    JavaScript 2023年6月10日
    00
  • 前端JavaScript算法找出只出现一次的数字

    前端JavaScript算法找出只出现一次的数字攻略如下: 第一步:理解题意 在开始编写算法之前,首先需要明确题意。题目要求我们在给定的数组中找到只出现一次的数字。 第二步:暴力解法 最简单的方法是使用双重循环遍历数组,对于每个数字,计算它在数组中出现的次数,然后检查该数字是否只出现了一次。代码示例如下: function findSingleNumber(…

    JavaScript 2023年5月28日
    00
  • JavaScript setInterval()与setTimeout()计时器

    JavaScript setInterval()和setTimeout()计时器 在 JavaScript 中,我们可以使用 setInterval() 和 setTimeout() 两个内置函数来创建计时器,控制代码执行的时间间隔。 setInterval() setInterval() 函数可以重复执行一个函数,并且每隔一定的时间间隔进行一次执行。函数接…

    JavaScript 2023年5月27日
    00
  • js技巧–转义符”\”的妙用

    来讲讲JavaScript中转义符“\”的妙用吧。 转义符的作用 在JavaScript中,转义符“\”可以在特定情况下表示一些特殊字符或者让某些字符变得有特殊意义。例如,我们可以使用转义符将一些内容输出在HTML中的标签中。 转义符实现HTML中标签的插入 比如说,我们有一个网站,需要在页面上显示如下这段文字: <p>This is a par…

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