JS进阶学习笔记(1) Let、Const

Let、Const


1、 es6新增了两个关键字let、const用于控制作用域

2、 let:用法类似于var,但所声明的变量只在let命令所在的代码块中有效

{
	let a=10;
	var b=1;
}
console.log(b); //1
console.1og(a); //报错

3、 var、let比较:

var a=[];
for(var i=0;i<10;i++){
    a[i]=function(){
        console.log(i);
    }
}
a[6]();
// 输出10。因为a[i]的函数在for的局域下,它的i使用的是for内的i,因此无论外面a[i]()为多少都是循环完毕才出来
var a=[];
for(let i=0;i<10;i++){
    a[i]=function(){
        console.log(i);
    }
}
a[6]();
// 输出6,每次循环使用的都是当次的i

4、for循环会形成两层作用域,设置循环变量的部分是一个父作用域,循环内部又是一个独立的子作用域

for(let i=0;i<3;i++){
	  let i='abc';
	  console.log(i);
	}
	// 输出三次abc。

5 、var声明的变量存在变量提升,let没有。

6、暂时性死区:在代码块内,使用let前该变量都是不可用的,这个区域被称为暂时性死区
在区块中若存在Let、const则此区块对这些命令声明的变量从一开始就形成封闭作用域

var temp=123;
    if(ture){
         temp='avc';
         let temp;
     }
     // 出错。

7、存在let的声明命令,同一代码块的同一变量不允许重复声明

function fn(){
    let a=0;
    let a=10;
    var a=1;
}
// 出错。

8、作用域链:每一段JavaScript代码(全局代码或函数)都有一个与之关联的作用域链(scope chain)。
当JavaScript查找变量x的时候(变量解析,variable reso1ution),会从当前作用域开始跟随作用域链向.上查找,直到找到x变量的声明,若到达全局作用域中仍未找到,则抛出一个引用错误(ReferenceError) 异常

9、 es5只有全局和函数作用域,从而会导致一些问题出现
(1)、内层变量可能会覆盖外层变量

var tmp=new Date() ;
    function f(){
        console. log(tmp) ;
        if(false){
            var tmp='hello' ;
        }
    }
    f();
// undefined

(2)、用来计数的循环变量泄露为全局变量(因此for循环的计数器很适合使用let)

var s='hello';
    for(var i=0;i<s.length;i++)
    {
        console.log(s[i]);
        // h e l l o
    }
    console.log(i);
    // 5

10、 块级作用域可以任意嵌套

11、 const只读,一旦被声明就不能改变且要立即初始化。其余用法同let。最好在声明常量时使用。

const foo={y:10};
foo.x=100;
 console.log(foo.x);
 // 输出100
 foo={n:1000};
 // 报错。
 // 引用被改变。

12、 当常量保存的不是一个值,而是一个地址的时候,该常量所引用的对象是可以更改成员的,只是不能更改该常量保存的地址。

13、 let、const不会关联到顶层对象window,var可以

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值