ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JavaScript 关键字let和const

2022-07-11 19:04:08  阅读:137  来源: 互联网

标签:const 定义 JavaScript name let var 变量


JavaScript 关键字let和const

看 JS 的时候,总感觉这个 JS 有那个大病,说话口齿不清,用起来也莫名其妙的,于是决定记一下。

关键字 let

首先从 ES6 引入的定义关键字 let 和 const 开始,在这之前,必须提一下没有 let 和 const 之前的 var 关键字。

在 ES6 之前,JavaScript 只有两种作用域:全局变量函数内的局部变量

// var 定义全局变量 文件内有效
var id = "qiyuanc";

function getName(){
    // 逆天之处 在函数内直接定义的变量 为全局变量
    // name = "祈鸢";
    
    // var 定义局部变量 函数内有效
    var name = "祈鸢";
    return name;
}

ES6 带来了 let 关键字和块级作用域的概念,因此 let 和 var 的区别就很关键了:

var id = "qy";
let name = "祈鸢";
{
    // id 被重新定义
    var id = "qiyuanc";
    // name 没有重新定义 在本块级作用域中 name = "?"
    let name = "?";
}
// 此处 id = "qiyuanc"
// 此处 name = "祈鸢"

let 声明的变量只在 let 命令所在的代码块 { } 内有效,在 { } 之外不能访问。

for 循环的条件也属于代码块,因此在 for 循环中使用 let 定义变量,可以达到与 Java 中 for 循环里定义的变量一样的作用域效果。

// 之前使用 var
var i = 5;
for (var i = 0; i < 10; i++) {
    // TODO...
}
// 此处 i 为 10

// 现在使用 let
let i = 5;
for (let i = 0; i < 10; i++) {
    // TODO...
}
// 此处 i 为 5

除了在块级作用域和循环条件中,var 与 let 还在以下场景有区别(可能还有别的):

  1. HTML 中定义变量:var 定义的对象属于 window(能通过 window. 访问),而 let 定义的对象则不属于 window(不能通过 window. 访问);
  2. 重置变量:使用 var 定义的变量在任何地方都可以被 var 重置,而使用 let 定义的变量在相同的作用域中,不能被任何方式重置(可以理解为不能重定义),但在不同的作用域中 let 是可以定义多个相同变量的;
  3. 变量提升:使用 var 定义的变量可以在定义前使用,而使用 let 定义的变量则不能在定义前使用。

稍微总结一下:比起 var 来说 let 更加严格,更加符合 Java 的编程方式,对我比较友好。

关键字 const

这个 const 关键字就是比较有病的东西了。

首先它和众多语言中的 const 一样,用于定义常量,即定义后不能修改的数据:

const owner = "qiyuanc";
owner = "lz"; // 错

const PI;
PI = 3.1415926535; // 错

使用 const 定义的常量与使用 let 定义的变量类似:

  1. 作用域都是块级,且在相同的作用域内不能重复定义;
  2. 在重置变量和变量提升上,与 let 也相同。

而 const 作为常量,与 let 的不同之处为:

  1. const 定义常量必须初始化,而 let 定义变量不用;
  2. 变量可以修改而常量不行(什么基础)。

但是,JS 里的这个 const 定义的并非严格意义上的常量,表现在使用 const 定义对象(Array、Map 等也算)时,对象的内容是可变的:

// 创建常量对象
const user = {id:"Qiyuanc", name:"祈鸢", pwd:"123456"};
 
// 修改属性
user.pwd = "lzlzlz";
 
// 添加属性
user.money = 9999;

// 但是不能重新辅赋值  错 ↓
user = {id:"Qiyuanb", name:"qyb", pwd:"123456"};

对于数组等而言也是这样:

// 创建常量数组
const users = ["Irror", "Qiyuanc", "Inory"];
 
// 修改元素
users[0] = "Irror111";
 
// 添加元素
users.push("Mashiro");

总之,JS 里的特性和语法都是有够奇怪的。

标签:const,定义,JavaScript,name,let,var,变量
来源: https://www.cnblogs.com/qiyuanc/p/JS1.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有