关于this的实质
记住几点就好:
- 函数的this指向是在函数被调用的时候确定的(依据其作用域决定)
- 如果函数是被某个对象调用(例如: obj.fn()), 那么其this指向改对象;如果函数是独立执行的,那么其内部的this指向undefined
- 非严格模式下,this指向undefined以后,会自动指向全局对象
- call和apply可以手动设置this的指向
- 箭头函数比较特别,他本身没有this的概念,其this是通过作用域链向上查找的
下面看几个例子123456789101112131415161718192021222324252627282930313233343536373839// demo1var data = 5;function fn() { console.log(this.data);}fn(); // 5// demo2var data = 5;function fn() { function foo() { console.log(this.data) } foo();}fn(); // 5// demo3var data = 5;function fn() { function foo() { console.log(this.data) } foo();}fn(); // undefined// demo4 var data = 5;var obj = { data: 10, val: this.data, fn: function () { return this.data; }}console.log(obj.val); // 5 因为obj并不是函数, 所以this指向undefinedconsole.log(obj.fn); // 10