• ES6--入门


    一.什么是ES6

    ES6, 全称 ECMAScript 6.0 ,是 JavaScript 的下一个版本标准,2015.06 发版。

    ES6 主要是为了解决 ES5 的先天不足,比如 JavaScript 里并没有类的概念,但是目前浏览器的 JavaScript 是 ES5 版本,大多数高版本的浏览器也支持 ES6,不过只实现了 ES6 的部分特性和功能。

    二.Es6语法

    1.变量 

    ES6之前声明变量有两种方式 var 和 function ,还有一种隐藏的变量,函数的形参,即函数的私有变量; 

    ES6提供的四种声明变量的方式:let , const , Class ,  import

    (1)var定义的变量

        作用:有变量提升但不定义赋值,还给window提供了一个对应的属性

    (2)function定义的变量

        作用:提前声明并同时定义赋值,这种叫做函数提升

        函数的参数默认值:

        ①写法上 有默认值的写后面,没默认值的写前面

        ②如果传对应的参数,就不要默认值了,不是先传默认参数,再用实参覆盖

    (3)let定义变量

        作用:不存在变量提升,在声明前不能使用,不能重复使用,也不会给window添加一个属性

    2.作用域

    作用域分为全局作用域和局部作用域;全局:window下声明的变量及函数外声明的变量都在全局作用域下运行;局部:函数内声明的变量都在局部作用域下运行。

    浏览器的运行机制:浏览器在执行时会生成一个全局环境叫做window,window分为两个模块,栈和堆,栈是存放变量的内存地址。堆用来存放代码块,然后浏览器

    (1)var的作用域

       window下所有的var,在if条件中,不管if语句中的条件成立不成立,都有变量提升

    //在window下的var都有变量提升

    var a=true; console.log(b) //undefined if(a){ var b=123; }

      

    (2)function

            function声明的变量会给window添加一个属性,属性值是方法

      函数的归属问题:跟在哪儿调用的无关,跟在哪儿定义的有关

    //函数归属问题

    var a=56; function fn(){ var a=12; return function ff(){ console.log(a) } } var ff=fn();
    ff()

      函数在if语句中的特殊情况:只提前声明但是不定义,只有条件成立了,if语句中的所有函数都会在第一时间被定义,然后再执行if语句中的其他代码

        var a=true;
        console.log(ff)    //undefined
        if(a){
            console.log(ff)    //函数ff
            function ff(){
                console.log(111)
            }
        }
        console.log(ff)  //函数ff
    

    (3)let的作用域 ES6提供了一种叫做块级作用域的概念

       块级作用域运用于在if条件语句 for循环语句和对象,只有let 和 const有块级作用域的个概念 ,但是var没有

      ①在块级作用域下,var和function没有作用,在块级中的function在块级前是只声明未定义的,但是在块级作用域中第一时间被定义

      ②在块级作用域中,let和const声明的变量是私有的,外面访问不到

      ③for循环下,let声明的变量不会泄露

      

    //用var 写事件,在浏览器中事件都是异步的,当事件执行的时候,for循环也执行完了
    所以每次点击都会输出 3
    
    for(var i=0;i<btns.length;i++){
       btns[i].onclick=function(){
            alert(i)
        }
     }
    
    用let的话 let声明的变量不会泄露 会正常输出 0 1 2
     for(let i=0;i<btns.length;i++){
         btns[i].onclick=function(){
             alert(i)
        }
     }
    

      ④块级作用域和对象该如何区分

      {}前面什么都不加的就是块级作用域  对象的话一定要将{}赋值给一个变量

    {
            a:"hahah",
            b:123
        }
    
    //Uncaught SyntaxError: Unexpected token :  
    //会报错
    
    
    console.log({
        a:"hahah",
        b:"dbhcb"
    })
    
    
    //给{}加一个()就好了 
    

      ⑤暂时性死区:块级作用域中只要存在let或const命令,就绑定了整个块级作用域,凡是在声明前使用变量,都会报错

      ⑥var a=a; 和 let a=a;  js中的赋值是从右往左,因为var有变量提升,所以不报错;但是Let没有变量提升 所以会报错

      ⑦块级作用域中 子可访问父的变量

    {
           let  a= 5;
           {  console.log(a)   }  // 5
    
    
    }
    

      

  • 相关阅读:
    [HNOI2006]超级英雄
    [CTSC1999]家园
    火星探险问题
    [HNOI2008]GT考试
    [USACO14DEC]后卫马克Guard Mark
    [NOI2018]归程
    [USACO15DEC]最大流Max Flow
    [NOIPlus]斗地主
    [LUOGU] P3128 [USACO15DEC]最大流Max Flow
    [BZOJ] 1878: [SDOI2009]HH的项链
  • 原文地址:https://www.cnblogs.com/qinlinkun/p/11139111.html
Copyright © 2020-2023  润新知