[es6学习笔记]块级作用域绑定

xiaoxiao2021-02-28  23

tip: 默认使用const,实在需要变量再使用let var声明变量的提升机制: //js在编译时会将方法里的变量预加载 ,提升到顶级 function getValue(condition){     if(condition){         var value='blue';         return value;     }else{         console.info(value);         //这里可以访问value :undefined         return null;     }     //这里可以访问value :undefined } getValue(); //实际上 function getValue(condition){     var value;     if(condition){         value='blue';         return value;     }else{         console.info(value);         //这里可以访问value :undefined         return null;     }     //这里可以访问value :undefined } 块级声明: let声明:     动态     和var无缝,禁止了提升机制     在重复定义时抛出异常  const声明:     静态      必须初始化 const name; //错误 未初始化常量     不能重复声明     const 变量不能修改绑定 但是可以修改绑定的属性值 const sta='ccc'; sta='bbb'; //- Assignment to constant variable. 分配常数变量 const a={     name:'aaaa' }; console.info(a); a.name="ccc"; console.info(a); //没问题 let和const在未声明前调用会出现临时死区  基本用不到 循环中块级作用域的绑定:     在循环中的var i会提升到循环外 for(var i=0;i<10;i++){ } console.info(i); //10 for(let i=0;i<10;i++){ } console.info(i); // i is not defined     循环中的作用域绑定: var arr=[]; (function (arr){     for(var i=0;i<10;i++){         arr.push(             function (){                 return i;             }             );     } })(arr); arr.forEach(function (i){     console.info(i()); }) //1010101010101001    原始解决方案: var arr=[]; (function (arr){     for(var i=0;i<10;i++){         arr.push(             ( //快速执行函数             function (value){                 return function (){                 return value;                 };                  }(i)             )             );     } })(arr); arr.forEach(function (i){     console.info(i()); }) //0123456789 将var替换为let则没有这种问题 for循环中不能修改的常量也可以使用const 如 for in forEach数组或者对象可以直接用 var 定义在首层时会将变量设置到window上 var a='aaa'; console.info(window.a); 而let或const创建的不会
转载请注明原文地址: https://www.6miu.com/read-2629308.html

最新回复(0)