深入理解ES6学习记录---1、块级作用域(var,const,let的区别)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_26983555/article/details/83305550

1.

var count = 30;
if(count) {
let count=11;
console.log("里面的"+count); ///11
}
console.log("外面的"+count); ///30
 var,const,let
  Var定义的变量会被提升到作用域顶部,const和let不会被提升(同个代码块中,声明在下面,上面调用就会造成临时死期错误(tdz)。不同代码块外,不会出现临时死期)
    1、const定义的变量不能在被修改,但定义的对象可以修改对象里面属性的值
    2、 let定义的变量可以在被修改

2.

变量使用var
var funcs = [];
        for(var i=0;i<10;i++){
            funcs.push(()=>{
                console.log(i);
            })
        }
        funcs.forEach((func)=>{
            console.log(i);///这里的i都是10
            console.log("fun"+func); ///这里输出的是10个function
            func(); /// 就会输出10个10
        })
变量使用let
var funcs = [];
        for(let i=0;i<10;i++){
            funcs.push(()=>{
                console.log(i);
            })
        }
        //forEach 是es5的写法(使用foreach遍历数组的话,使用break不能中断循环,使用return也不能返回到外层函数。)
        funcs.forEach((func)=>{
            console.log(i);///这句是会报错的,i不在此取到
            console.log("fun"+func); ///这里输出的是0-9的个function
            func(); /// 就会输出0-9
        })
 变量使用const,第一次迭代不会报错,但是第二次迭代就会出错

3. in 、(for in获取的值是索引) (for of获取的值是数组的值)
要取对象中的属性,就可以引用in

////for in更适合遍历对象,不要使用for in遍历数组
///用for of遍历数组
  object = {
               a: true,
               b: true,
               c :true
           };
           //这里可以定义key是let,也可以用consr来定义const。(因为他这里是每次都是创建一个新的绑定)
           for(let key in object){
         console.log(key);   // a b c
        }

ES5的Object.keys(myObject)获取对象的实例属性

 Object.keys(object1).forEach((key,index)=>{
            console.log(key,object1[key]); // a true,b true, c true
        })

4. 全局对象跟定义的数据 var 定义的变量,会覆盖全局的window的变量。

///这种情况常见于在浏览器中跨iframe或者跨window访问代码时用到
var RegExP ='HELLO'
window.RegExP == RegExP ;
但是如果是let或者const
let RegExP ='HELLO'  /// 不想改变全局对象
window.RegExP != RegExP ;

而const和let定义的变量,是在全局下新增一个新的绑定

展开阅读全文

没有更多推荐了,返回首页