es6

1.变量

  声明变量的方式:var function 用来定义变量

  es6定义变量的关键字

    let conts  class import  var function 

  备注:不能忽略函数的形参 函数的私有变量

var 定义变量

  var变量能够提升但是不能定义 给window 添加一个属性

  function既可以提前声明 同时还定义了

  定义:所谓的定义就是给这个变量赋值了

let是es6提供的一种声明变量的方式

  1.没有变量提升功能 在声明之前不能使用

  2.不能重复声明

  3.不会给window添加属性

作用域

  var 作用域

    var 声明的变量 作用域分两种

    全局作用域

      在window下声明的变量或者是在函数外声明的变量

    局部作用域

      在函数内声明的变量

    了解浏览器执行的机制

      浏览器在执行的时候,首先开辟一个大空间叫window,  window下面分两个模块,一个叫栈,一个叫堆。栈用来存放变量的内存地址,堆主要存放代码块。然后浏览器从上到下执行代码

    function 申请的变量

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

    函数归属?

      1.函数归谁,跟他在哪调用无关,跟他在哪定义有关

      

        2.任何一个函数执行后都有一个返回值如果写了return,return的是什么就是什么,如果没有return就是undefined

      

        3.函数在if中的特殊情况

       

        在if语句中定义的函数,只声明不定义,当条件成立的时候,if模块中不管函数在哪声明的函数,都会第一步对函数先定义,在执行if里面的代码块

    let声明的变量  

      带{}的都是块级作用域(私有作用域),if(){}   for(){} 对象(){}函数不是块级作用域因为函数本身就是私有作用域

      var function  没有块级作用域这个概念,let和const有块级作用域这个概念

      1.在块级作用域下var 和function 跟在window下一样,function有一个特殊的,在块级作用域前声明不会定义

      

       2.在块级作用域下let和conts声明的变量是私有的,外面访问不到

      

       3.for循环下let声明的变量不会泄露

     

       事件是异步的,for循环结束之后i是3并且i还是全局的,点击li最后alter出i,i此时是3,所以都会弹出3

      

     块级作用域和对象的区别

       这个是块级作用域

        

          {}如果想表示对象,不能放在行首,就是{}前面不能没有东西。如果{}前面什么都没有就是块级作用域

       

     暂时性死区

        如果块级作用域内使用let和conts命令声明变量了,这个区域就会被这个变量强制绑定,凡是在声明之前这些变量都是不可用的,使用会报错,这就是暂时性死区

      

         暂时性死区场景

          

        使用变量b在定义变量之前,出现了暂时性死区

      let a=a;报错    赋值运算是从右往左,右边使用变量a结果发现a没有声明,而let语法规定不能在没有定义前使用变量,所以报错

      var a=a;不报错  因为var可以变量提升在等号赋值的时候,是从右往左,使用变量a,此时a是undefined,赋值时就是把undefined赋值给a,所以a还是undefined

函数参数默认值

   1.写法上有默认值得写后面,没有默认值的写前面

   2.如果传对应的参数,就不要默认值了,不是先赋默认值然后实参去覆盖

 

原文地址:https://www.cnblogs.com/jiangningjn/p/11138645.html