ES6学习笔记(1)- 块级作用域

本文探讨了JavaScript中的变量提升机制及其可能导致的问题,并介绍了ES6中引入的let和const声明来解决这些问题。通过示例说明了let如何创建块级作用域以及const声明常量的特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. var声明变量和变量提升(Hoisting)机制的问题

 在JS中通过var关键字声明的变量,无论在函数作用域中亦或是全局作用域中,都会被当成当前作用域顶部的变量,和就是所谓的提升机制(Hoisting)。但是提升机制会带来一个问题就是,预编译阶段JS引擎会将变量提升至作用域顶部,但是初始化操作是在某个作用域中,进而导致了引用了该变量的其他作用域并没有被初始化,也就导致在浏览器看到undefined的结果。具体可看如下伪代码:

function printValue(condition) {
    if (condition) {
        var count = 10;
        console.log('if ' + count);
    } else {
         // 此处如果访问count,则会在控制台打印undefined
        console.log('else ' + count);
    }
    // 此处如果访问count,会在控制台打印10
    console.log('Out side of Scope ' + count);
}

printValue(true);
printValue(false);
function printValue(condition) {
    var count = 10;
    if (condition) {
        console.log('if ' + count);
    } else {
         // 此处如果访问count,则会在控制台打印undefined
        console.log('else ' + count);
    }
    // 此处如果访问count,会在控制台打印10
    console.log('Out side of Scope ' + count);
}

printValue(true);
printValue(false);

块级作用域的引入解决了上述问题,块级作用域存在于:

  • 函数内部;
  • { statements }之中;

那么如何声明块级作用域呢?ES6语法中引入了let声明,用法和var一致,但是可以把变量的作用域限制在当前的代码块中,也就顺带解决了Hoisting所带来的问题。

2. const声明

const声明的是常量,因此const声明常量的时候必须进行初始化。这里需要注意的是ES6语法中,如果使用const声明的是普通变量,那么是不可再被赋值修改的;但是如果定义的常量是对象,那么对象中的属性的值是可以修改的。

const company = {
   companyName: 'ABC Ltd',
   legalPerson: 'Nicholas'  
};

// 可以修改对象属性的值
company.companyName = 'XYZ Ltd';

// 下面则会抛出语法错误,这里需要注意的一个区别是直接给对象的属性重新赋值是改变了绑定,就会抛出错误
company = {
   companyName: 'XYZ Ltd',
   legalPerson: 'Nicholas'  
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值