this指向

一句话总结:谁调用它指向得就是谁(是否有调用者),无调用者默认是window

function f1(){
  console.log(1)  
}
var obj = {
  a: 1  
}
obj.f1(); //这里的f1被obj调用了,它指向了obj

预编译:

  过程:定义var、function --> 逐行执行

     也就是说js解析器会在页面正式运行之前,把用var、function等定义的变量和函数先保存在”仓库中“,当运行到需要使用这些变量和函数的时候,js解析器会首先去”仓库“中寻找,如果”仓库“中的值是未定义的,它就会直接返回undefined!

  注意:全局变量和局部变量同名的坑:全局变量是不会作用于同名局部变量的作用域的

var a = 10;
function test() {
  console.log(a);
  a = 100;
  console.log(this.a);
  var a;
  console.log(a);
}
test(); //undefined、10、100

//预解析过程
function test() {
  var a;
  console.log(a); // undefined
  a = 100;
  console.log(this.a);//无调用者,指向window.输出10
  console.log(a); //100
}
var a = 100;
(function() {
    var a = b = 100;   //等价于b = 100; var a = b;
})()
console.log(b);  //100
console.log(a);  //10

//先在函数内部找b的定义,找不到就到外边找,就在全局创建了一个b

原文地址:https://www.cnblogs.com/lchsirblog/p/13253317.html