zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    ubuntu14.04server下安装scala+sbt工具
    如何在Ubuntu server中修改IP
    机器学习涉及到的数学知识
    Openfire+spark在linux上搭建内部聊天系统
    ubuntu14.04server版安装redis
    网站流量统计
    Visual Studio-使用vs2015 调用 vs2010编译的库时解决"无法解析的外部符号__iob_func 问题"
    书签中的一些工具整理
    android开发学习——day3
    android开发学习——day2
  • 原文地址:https://www.cnblogs.com/fuzhengyi/p/7954982.html
Copyright © 2011-2022 走看看