javascript 中分别使用 let 和 var 声明变量有何区别

时间:2023-08-31    阅读:0

Javascript中的let是ES6新增的关键字,声明变量时,可以使用 letvar 这两个关键字, 它们有一些区别,下面是一些示例来说明它们之间的不同之处

1. 作用域不同

在一对{ }内(块级)分别使用 varlet 声明的变量作用域不同

   if (true) {
       var a = "我是使用var声明的变量";
       let b = "我是使用let声明的变量";
   }
   
   console.log(a); // "我是使用var声明的变量"
   console.log(b); // Uncaught ReferenceError: b is not defined

此时,a 在块级作用域外部仍然可见,而 b 由于具有块级作用域,只在 if 语句内可见。

在循环中:
在使用 var 的情况下,异步代码中使用的是同一个变量 i,而在使用 let 的情况下,每次循环都会创建一个新的 j,因此不会出现问题。

   for (var i = 0; i < 5; i++) {
       setTimeout(function() {
           console.log("var is:", i); //会打印5次 "var is: 5" 
       }, 100);
   }
   
   for (let j = 0; j < 5; j++) {
       setTimeout(function() {
           console.log("var is:", j); // 会依次打印"var is: 0", "var is: 1", ..., "var is: 4"
       }, 100);
   }

2. js变量提升和暂时性死区

   console.log(a); // undefined
   console.log(b); // Uncaught ReferenceError: b is not defined
   
   var a = "hello";
   let b = "world";

a 被提升并初始化为 undefined,而 b 在声明之前不能访问,因为它受到了暂时性死区的影响。

3. 变量是否允许重复声明

var 允许在同一作用域内多次声明同一个变量,而 let 则不允许。

   var a = "hello";
   var a = "world"; // 可重复声明,不会报错
   
   let b = "hello";
   let b = "world"; // Uncaught SyntaxError: Identifier 'b' has already been declared

4. 是否自动成为全局对象属性

使用 var 声明的全局变量会成为全局对象的属性,而使用 let 声明的变量不会。

   var  = "hello";
   console.log(window.a); // "hello"
   
   let b = "world";
   console.log(window.b); // undefined

综上所述,let 在许多情况下是更安全的变量声明方式,推荐在支持ES6的 JavaScript 代码中使用。

分类:前端 标签: javascript
相关推荐
  • Python——PyQt5以及Pycharm相关配置

    Qt是一个跨平台的 C++图形用户界面库。QT一度被诺基亚拥,后出售给芬兰的软件公司Digia Oyj。PyQt5是基于Digia公司Qt5的Python接口,由一组Python模块构成。PyQt5本身拥有超过620个类和6000函数及方法。

    浏览10 2023-08-01