前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JavaScript 学习-9.使用let声明变量

JavaScript 学习-9.使用let声明变量

作者头像
上海-悠悠
发布2022-05-18 19:10:50
5520
发布2022-05-18 19:10:50
举报

前言

ES2015(ES6) 新增加了两个重要的 JavaScript 关键字: let 和 const。

  • let 声明的变量只在 let 命令所在的代码块内有效。
  • const 声明一个只读的常量,一旦声明,常量的值就不能改变。

在 ES6 之前,JavaScript 使用var声明变量只有两种作用域:全局变量 与 函数内的局部变量。

var声明变量使用

var声明变量只有两种作用域:全局变量 与 函数内的局部变量。

全局变量

在函数外声明的变量作用域是全局的, 在任意地方都可以引用

代码语言:javascript
复制
    var x = 'hello';
    function fun1() {
        // 函数内部也可以引用x
        console.log(x)
    }
    fun1();

局部变量

在函数内部定义的var 变量只能局部使用,函数外面都无法引用。

代码语言:javascript
复制
    function fun1() {
        var x = 'hello';
        // 函数内部可以引用x
        console.log(x)
    }
    // 函数外面不能引用函数内部变量x
    console.log(x)  //  x is not defined
    fun1();

没有块级作用域

使用var定义的变量,没有块级作用域,什么是块级?比如if 后面大括号的内容,for 循环大括号里面的循环体,都是块级。

代码语言:javascript
复制
    a = 10;
    if (a > 0){
        var x = 'hello'
    }
    // if 块级外面也能引用x
    console.log(x)

for 循环体也是块级

代码语言:javascript
复制
    arr = [1, 2, 3];
    for(var index in arr){
        var x = 'world'
    }
    // for 外面也能引用x
    console.log(x);   // world
    // for 外面也能引用index
    console.log(index);  // 2

没有块级作用域,那在使用过程中就会出现一些问题,比如重新声明同一个名称变量

代码语言:javascript
复制
    var a = 'hello'
    var x = 20;
    if (x > 0) {
        var a = 'world';
    }
    // 在if 中声明了同一个a, 最后会影响外面的a值
    console.log(a);  // world

为了避免这种问题,所以在新的ES6 中添加了let 关键字声明变量

let 声明变量作用域

块级作用域

使用let声明的变量,首先具有块级作用域的概念,在块级代码声明的变量,外面无法引用

代码语言:javascript
复制
    a = 10;
    if (a>0){
        let x = 'hello';  // let 声明块级变量
        console.log(x);
    }
    console.log(x);   // x is not defined

如果块级代码外面也有同一个名称变量,使用let互不影响

代码语言:javascript
复制
    a = 10;
    let x = 'world'
    if (a>0){
        let x = 'hello';  // let 声明块级变量
        console.log(x); // hello
    }
    console.log(x);   // world

在for循环时使用let定义循环变量i

代码语言:javascript
复制
    let i = 5;
    for (let i = 0; i < 10; i++) {
        // do something...
    }
    console.log(i)  // 这里输出 i 为 5

局部变量

在函数体内使用 var 和 let 关键字声明的变量有点类似, 作用域都是局部的:

代码语言:javascript
复制
function fun() {
        let x = "hello";   //  局部作用域
        return x
    }

全局变量

在函数体外或代码块外使用 var 和 let 关键字声明的变量也类似,它们的作用域都是全局的

代码语言:javascript
复制
// 使用 var
var x = 'hello';       // 全局作用域

// 使用 let
let y = 'hello';       // 全局作用域

let 和 var 不一样的地方

重复声明

var 可以对同一个变量重复声明,但是let不能重复声明

代码语言:javascript
复制
// 使用 var
var x = 'hello';
var x = 'world';   
console.log(x);   // world

使用let重复声明同一个let声明过的变量会报错,相同的作用域或块级作用域中都不行。

代码语言:javascript
复制
// 使用let
let y = 'world';
let y = 'world'; // 报错

会抛出异常Uncaught SyntaxError: Identifier 'y' has already been declared (at ...)

也不能使用 let 重复声明 war 声明过的变量,相同的作用域或块级作用域中都不行。

代码语言:javascript
复制
var y = 'world';
let y = 'world'; // 报错

或者以下也不行

代码语言:javascript
复制
let y = 'world';
var y = 'world'; // 报错

变量提升

let 声明的变量没有提升

代码语言:javascript
复制
console.log(x)  // undefined
var x = 'hello'

console.log(y)  // 报错
let y = 'world';

全局作用域

使用 var 关键字声明的全局作用域变量属于 window 对象:

代码语言:javascript
复制
var x = "hello";
// 可以使用 window.x 访问变量

使用 let 关键字声明的全局作用域变量不属于 window 对象:

代码语言:javascript
复制
let y= "world";
// 不能使用 window.y访问变量

总的来说let声明的变量多了一个块级作用域的使用,在使用的时候尽量避免声明同一个变量。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从零开始学自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • var声明变量使用
    • 全局变量
      • 局部变量
        • 没有块级作用域
        • let 声明变量作用域
          • 块级作用域
            • 局部变量
              • 全局变量
              • let 和 var 不一样的地方
                • 重复声明
                  • 变量提升
                    • 全局作用域
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档