es6变量let

 

  ECMAScript 和 JavaScript 的关系是,前者是后者的规格,后者是前者的一种实现(另外的 ECMAScript 方言还有 JScript 和 ActionScript)。日常场合,这两个词是可以互换的。

  ES6 既是一个历史名词,也是一个泛指,含义是 5.1 版以后的 JavaScript 的下一代标准,涵盖了 ES2015、ES2016、ES2017 等等,而 ES2015 则是正式名称,特指该年发布的正式版本的语言标准。本书中提到 ES6 的地方,一般是指 ES2015 标准,但有时也是泛指“下一代 JavaScript 语言”。

  定义变量的关键字  var function let const class import  ( 不能忽略函数的形参,函数的私有变量)

    var 定义变量 有变量提升但是不能定义(所谓的定义就是给这个变量赋值了) 给window添加一个对应的属性

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

    let是es6新增的命令,用来声明变量  没有变量提升,再声明之前不能使用   不能重复声明    不会给window添加属性

 

  作用域:

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

    全局作用域  在window下声明的变量或者是在函数外声明的变量

    局部作用域  在函数内部声明的变量

  了解浏览器执行的机制

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

    浏览器从上到下执行代码

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

  函数归属  

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

    

      任何函数都有一个返回值,如果写了return,return的是什么就得到的是什么,如果没有return得到的是undefined

        

 

       函数在if中的特殊 情况

        

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

 块级作用域

  带{}都是块级作用域  if(){}  for(){}  对象(){}

   var 没有块级作用域的概念  (var 有变量提升)

  let和const有块级作用域的概念

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

    

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

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

  块级作用域和对象的区分

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

     

 

   暂时性死区

        

      只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。
    如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。
    凡是在声明之前就使用这些变量,就会报错。这就是暂时性死区

  暂时性死区的场景

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

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

  

  函数参数默认值
    写法上 有默认值的写后面,没有默认值写前面
    如果传对应的参数 就不要默认值了 不是先赋值默认值 用实参数去覆盖

 

 

posted @ 2019-07-05 15:11  枯桑  阅读(375)  评论(0编辑  收藏  举报