1、函数预编译过程 this -->window
2、全局作用域里this -->window
3、call//apply 可以改变函数运行时this指向
4、obj.func(); func()里面的this指向obj
5、例题:
(1) var f = ( function f() { return "1"; }, function g() { return 2; } )(); typeof f; //结果为‘number,括号里用逗号分隔,取后面那个 (2) var x = 1; if(function f() {}) { x += typeof f; } console.log(x); //结果‘1undefined’ (3){} == {} -->false 因为{} 为两个不同的空间
(4) var name = ‘222‘; var a = { name : ‘111‘, say : function() { console.log(this.name); } } var fun = a.say; fun(); // 222 a.say(); // 111 var b = { name : ‘333‘, say : function (fun) { fun(); } } b.say(a.say); // 222 // b 的say 里面的this指向b, 但函数并没有谁调用它执行,所以函数里面this,指向window b.say = a.say; b.say(); // 333 (5) var foo = 123; function print() { //var this = Object.create(print.prototype) this.foo = 234; //这里的this 没有foo ,所以就上上一层找 console.log(foo); // 123 } new print(); (6) var a = 5; function test() { a = 0; alert(a); //0 alert(this.a); //undefined this 上面没有a var a; alert(a); //0 } new test(); AO{ a : 0, this : {} }
原文:https://www.cnblogs.com/hjysunshine/p/12285036.html