ES6-Let

了解浏览器执行的机制:

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

1.定义变量的两种:var   function

2.ES6定义变量 :Let  const              前端定义变量的关键字:var   function  Let  const  Class  import  定义变量的关键字

不能忽略函数的形参(函数的私有变量)

3.var和function的功能:var 存在变量提升,不能定义,给window添加一个对应的属性

             function 可以提前声明,可以给变量赋值;

4.Let :ES6提供的一种声明变量的方式;

  (1)不存在变量提升

  (2)不会给window添加属性

  (3)不能重复声明

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

  (1)全局作用域:在window下声明的变量或者在函数外声明的

  (2)局部作用域: 在函数内声明的变量

6.块级作用域(私有作用域):带大括号的,如:for  if,else 对象

  var 没有块级作用域这个概念,只存在变量提升的概念;Let 和Const有块级作用域的概念;

7.块级作用域和函数作用域的区别:

  在块级作用域下,var和function跟在作用域下是一样的,变量在当前作用域下没有会向上查找

  块级作用域的启动需要加{ },function在块级作用域前只会提前声明,不会提前定义;

8,在块级作用域下,Let和Const声明的变量是私有的,外面访问不到;

9.for循环下Let声明的变量不会泄露;

10.块级作用域和对象的区分,因为两者的表示都是花括号;

 11.函数参数默认值:

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

  (1)写法上:有默认值的写后面,没有默认值的写前面;

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

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

  

调用这个ff这个匿名函数,将fn赋给了ff,那么任何一个函数执行后都有一个返回值,如果写了return,return的是

什么结果就是什么,如果没有return得到的是undefined;

  

13.函数在if中的情况:

  

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

  

14.对暂时性死区的理解:

  如果块级作用域内使用let和const命令声明变量了,这个区域就会被这个变量强制绑定,凡是在声明之前这些变量都是不可用的;如果使用就会报错。意思是如果你在let或者const之前声明了,那么就会报错;块级作用域里面的声明不会访问到外部,除var 和function;

   

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

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

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

原文地址:https://www.cnblogs.com/lovels/p/11137282.html