ES6 第二章 let 和 const

一、let

let用于声明变量,但是只在最近的代码块之内有效。

for(i=0;i<2;i++){
	let a=30;
	var b=20;
}
alert(b)    //20
alert(a)    //a is not defined
  • 暂时性死区
    在代码块内,在使用let语句声明前,该变量都不可用。
    暂时性死区的本质就是,只要一进入当前作用域,要是使用变量就已经存在了,但是不可获取,只有声明了该变量,该变量才可以使用和获取。
  • 不允许重复声明:
 function test(){
                let a = 10;
                var a = 1;//报错:不允许重复声明
            }
   test();
  
  function s(){
                let a = 10;
                let a = 1;//报错:不允许重复声明
            }
   s();
   function s(){
                var a = 10;
                var a = 1;//
                alert(a);//不报错,输出1
            }
    s();
function func(arg){
                let arg;//报错:arg 已经被声明了
            }
func();

function func2(arg){
               { let arg;}//不报错
            }
 func2();

二、块级作用域

  • 目的:防止内层变量覆盖外层变量;用来计数的循环变量泄露成全局变量。

1.外层代码块不收内层代码块的影响

var a = 5;
            if(true){
                var a = 10;
            }
 alert(a);		//5

2.有三层块级作用域,前面的作用域不可以访问最内层的a

{{{
	let a=10;
}}}}

{{	let a=5;
	{
		let a=10;
	}
	alert(a);		//5
}}}

3.考虑到环境导致的行为差异太大,最好写成函数表达式,而不是函数声明语句。

// 块级作用域内部的函数声明语句,建议不要使用
{
  let a = 'secret';
  function f() {
    return a;
  }
}

// 块级作用域内部,优先使用函数表达式
{
  let a = 'secret';
  let f = function () {
    return a;
  };
}

三、const命令

1、const声明一个只读的常量。一旦声明,常量的值就不能改变。

  • 只在块级作用域中起作用
 			if(true){
                const a = 5;
            }
            alert(a);	//报错:找不到
  • 要先声明在调用
			if(true){
                a = 6;
                const a = 5;
                alert(a);
            }
  • 不能重复声明变量
			const a = 5;
            const a = 4;		//报错:a已经被声明过了

2、本质
并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。
对于复合数据类型,我们可以对它使用一些方法,但不可直接赋值。

四、声明变量的六种方法

(1)var和function
声明的全局变量,依旧是顶层对象的属性
(2)let和const属性
声明的全局变量,不属于顶层对象的属性
(3)import命令和class命令

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值