this
一、函数中的this
在一个函数上下文中,this由调用者提供,由调用函数的方式来决定。如果调用者函数,被某一个对象所拥有,那么该函数在调用时,内部的this指向该对象。如果函数独立调用,那么该函数内部的this,则指向undefined。但是在非严格模式中,当this指向undefined时,它会被自动指向全局对象。
二、
这里我们需要明确的一点是,单独的{}
是不会形成新的作用域的,因此这里的this.a
,由于并没有作用域的限制,所以它仍然处于全局作用域之中。所以这里的this其实是指向的window对象。var a = 20;
var obj = {
a: 10,
c: this.a + 20, // 单独的{}
是不会形成新的作用域的
fn: function () {
return this.a;
}
}
console.log(obj.c); // 40
console.log(obj.fn()); // 10
'use strict'; var a = 20; function foo () { var a = 1; var obj = { a: 10, c: this.a + 20, fn: function () { return this.a; } } return obj.c; } console.log(foo()); // Uncaught TypeError: Cannot read property 'a' of undefined console.log(window.foo()); // 40
var a = 20;
var foo = {
a: 10,
getA: function () {
return this.a;
}
}
console.log(foo.getA()); // 10 他不是独立调用,被对象foo所拥有
var test = foo.getA;
console.log(test()); // 20 test()
作为调用者
function foo() { console.log(this.a) } function active(fn) { fn(); // 真实调用者,为独立调用 } var a = 20; var obj = { a: 10, getA: foo } active(obj.getA); // 20
箭头函数不会创建自己的this,它使用封闭执行上下文的this值
箭头函数 使用bind apply call 不起作用