javascript let 介绍

本文介绍了JavaScript中的严格模式,并探讨了let关键字与var关键字之间的区别。通过示例代码展示了如何启用严格模式来避免常见错误,并解释了let和var在声明后未赋值时的表现。

javascript 严格模式

第一次接触let关键字,有一个要非常非常要注意的概念就是”JavaScript 严格模式”,比如下述的代码运行就会报错:

let hello = 'hello world.';
console.log(hello);

报错如下

let hello = 'hello world.';
^^^

SyntaxError: Block-scoped declarations (let, const, function, class) not yet supported outside strict mode
    ...
解决方法就是,在文件头添加”javascript 严格模式”声明:

'use strict';

let hello = 'hello world.';
console.log(hello);

let和var关键字的异同

声明后未赋值,表现相同

'use strict';

(function() {
  var varTest;
  let letTest;
  console.log(varTest); //输出undefined
  console.log(letTest); //输出undefined
}());





### JavaScript 中 `let` 关键字的使用方法 在 JavaScript 中,`let` 是 ES6 引入的关键字,用于声明块级作用域的变量。与 `var` 不同,`let` 声明的变量具有更严格的规则和作用域限制[^3]。 #### 1. 块级作用域 `let` 声明的变量仅在其所在的代码块内可见。如果尝试在代码块外部访问该变量,将抛出 `ReferenceError` 错误。 ```javascript { let cat = "猫"; console.log(cat); // 输出:猫 } console.log(cat); // 报错:Uncaught ReferenceError: cat is not defined [^5] ``` #### 2. 重复声明限制 与 `var` 不同,`let` 不允许在同一作用域内重复声明相同的变量名。重复声明会导致 `SyntaxError` 错误。 ```javascript let name = "jack"; console.log("第一次声明的变量:", name); // 输出:jack let name = "marry"; // 报错:Uncaught SyntaxError: Identifier 'name' has already been declared [^3] ``` #### 3. 暂时性死区 (Temporal Dead Zone, TDZ) 在同一个作用域中,`let` 声明的变量在声明之前是不可访问的。如果尝试在声明之前访问该变量,将抛出 `ReferenceError` 错误。 ```javascript console.log(age); // 报错:Uncaught ReferenceError: Cannot access 'age' before initialization let age = 25; console.log(age); // 输出:25 ``` #### 4. 循环中的块级作用域 在循环中使用 `let` 声明变量可以避免变量泄露到全局作用域,并且每次迭代都会创建一个新的变量实例。 ```javascript for (let i = 0; i < 3; i++) { console.log(`当前值为: ${i}`); } console.log(i); // 报错:Uncaught ReferenceError: i is not defined [^4] ``` #### 5. 与 `const` 的对比 虽然 `let` 和 `const` 都用于声明块级作用域的变量,但 `const` 声明的变量必须在声明时初始化,并且不能重新赋值。 ```javascript const pi = 3.14; pi = 3; // 报错:Assignment to constant variable. ``` --- ### 示例代码 以下是一个综合示例,展示 `let` 在不同场景下的用法: ```javascript // 块级作用域 { let message = "Hello World!"; console.log(message); // 输出:Hello World! } console.log(message); // 报错:Uncaught ReferenceError: message is not defined [^5] // 循环中的块级作用域 for (let j = 0; j < 3; j++) { console.log(`循环中的值为: ${j}`); } console.log(j); // 报错:Uncaught ReferenceError: j is not defined [^4] // 暂时性死区 console.log(temp); // 报错:Uncaught ReferenceError: Cannot access 'temp' before initialization let temp = "Temporary Variable"; console.log(temp); // 输出:Temporary Variable ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值