变量晋升

JS引擎的工作形式:先解析代码,获取所有被申明的变量,而后再一行一行的运行

console.log(a) // undefined var a = 2

相当于

var aconsole.log(a)a = 2

这就是变量晋升

函数申明也会晋升,并且优先于表达式
getName() // 1 function getName() {  console.log('1')}var getName = function() {  console.log('2')}getName() // 2

暂时性死区

ES6的let\const不会变量晋升

typeof a // ReferenceError: a is not definedlet a

因为let不会变量晋升,所以在申明前调用会报错

let x = 'outer value'!(function(){    console.log(x) //  Cannot access 'x' before initialization    let x = 'inner value'})()

ES6规定,let/const命令会使区块造成关闭的作用域,在这个作用域下,从进入到变量能够拜访之间的一段时间,就称之为暂时性死区,在暂时性死区,该变量都是不可用的

this指向

  1. 独自应用,指向全局对象window,严格模式下,指向undefined
  2. 函数外部,函数执行时能力确定

    function f() {  var user = "星辰大海";  console.log(this.user); // undfined   console.log(this); // Window }f();
  3. 办法中,this指向调用办法的对象

      var a = 18;  var obj = {    a: 19,    b: {      a: 20,      c: function () {      console.log(this.a);       }    }  }  obj.b.c(); // 20