let与const认识

 

es2015之前

在es2015之前JavaScript并没有块级作用域这个说法,只有全局和函数级的变量,let的出现使JavaScript语言有了块级作用域

在外面访问

{
var a=5; let b=10; } console.log(a,b);//a=5 b=undefined

在里面访问
{
  var a=5;
  let  b=10;  
 {
  console.log(a,b);//a=5 b=12
  }  
}
泄密

 

for(var i=0; i<5; i++){};
console.log(i)//i=5

for(var i=0; i<5; i++){};
console.log(i)//i=undefined
提升

使用var声明的变量会提升,而使用let声明的变量不会提升

function f(){
  console.log(a);   
  var a=5;
  
  /*等价于
  var a;
  console.log(a);
  a=5;*/
}
 f()//a=undefined


function f(){
  console.log(a);   
  let a=5;
}
 f()//a is not defined
代替立即执行匿名函数
var config = (function(){
       var config = [];
       config.push(1);
       config.push(2);
       config.push(3);
       return config;
})();


let config;
{
  config = [];
  config.push(1);
  config.push(2);
  config.push(3);  
}
 在严格模式(use strict)下运行函数不会被提升
function a(){console.log(1);}
function f(){
  a();
  if(false){
          function a(){console.log(2)}
  }
}

//这段代码在非严格模式下运行会打印出2,在严格模式下运行会打印出1
  • 实例例子
var arr= [];

function f(){
   for(var i=0; i<5; i++){
      arr.push(function(){
          console.log(i);
      })
  }  
}

f();

arr[3]()//5
arr[4]()//5
arr[1]()//5

想要执行出想要的结果arr[x]()//x就必须用到let

var arr= [];

function f(){
   for(let i=0; i<5; i++){
      arr.push(function(){
          console.log(i);
      })
  }  
}

f();

arr[3]()//3
arr[4]()//4
arr[1]()//1

在es2015之前您必须这样做

var arr= [];

function f(){
   for(var i=0; i<5; i++){
      arr.push((function(i){
          return function(){
                console.log(i);
          }
      })(i))
  }  
}

f();

arr[3]()//3
arr[4]()//4
arr[1]()//1

 

转载于:https://www.cnblogs.com/fuzhengyi/p/7954982.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值