let和const学习笔记

参考文章:http://es6.ruanyifeng.com/#docs/let

let使用

  • 先定义后使用,如果不先定义在使用的话,会存在直接报错
console.log(x);
let x = 4;
//Uncaught ReferenceError: Cannot access 'x' before initialization
  • 在使用let定义的作用域当中,这个变量是无法使用的,即使在父级作用域存在仍然无法使用
let x = 4;
if (true) {
    console.log(x);
    let x = 4;
}
//Uncaught ReferenceError: Cannot access 'x' before initialization
/*
虽然在if的外面定义了x变量,但是在if条件语句的这个块级作用域当中x变量还是处于未定义状态,所以不能够使用,在if的外面使用var定义也仍然不能使用
*/
  • 使用let声明的变量不能够重复声明
let x = 3;
let x = 4;
/*
let x = 3;
var x = 4;
//==============
var x = 3;
let x = 4;
也是一样不能够的
*/
//Uncaught SyntaxError: Identifier 'x' has already been declared

块级作用域

因为在使用var定义变量的时候,会将定义的变量作为一个全局变量(如果在函数中,就是这个函数的全局作用域),这样会带来很多麻烦,比如内层变量可能覆盖外层变量,无意中定义全局变量

  • 内层块级作用域不会影响外层的块级作用域
{
    {
        {
            let temp = "hello 1";
            console.log(temp);
        }
        let temp = "hello 2";
        console.log(temp);
    }
    let temp = "hello";
    console.log(temp);
}
  • 最好不要在块级作用域定义函数

例子一:

function fun() {
    console.log('外面的fun()...');
}
{
    {
        {
            function fun() {
                console.log('里面的fun()...');
            }
            fun();
        }
    }
}
fun();

例子二:

function fun() {
    console.log('外面的fun()...');
}
{
    {
        {
            if (false) {
                function fun() {
                    console.log('里面的fun()...');
                }
            }
            fun();
        }
    }
}
fun();

例子三:

function fun() {
    console.log('外面的fun()...');
}

(function () {
   if (false) {
       function fun() {
           console.log('里面的fun()...');
       }
   }
   fun();
}());

const使用

constlet许多地方是一样的,有区别的地方在于const定义的变量是不可更改的(变量指向的地址不可更改,地址里面的内容是可以更改的,除非将对象冻结)

const a = 1;
a = 2;
//Uncaught TypeError: Assignment to constant variable

const obj = {};
//指向一个对象,更改对象里面的值,并不会报错
obj.name = "hzj";
obj.age = 22;
//让obj指向一个新的对象,将会报错
obj = {};

将对象冻结后将不能够更改里面的值,在添加属性的时候不起作用

let obj = Object.freeze({});
obj.name = "hzj";
obj.age = 22;
console.log(obj);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值