this是 JavaScript 语言的一个关键字。
它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用。比如:
function test() {
this.x = 1;
}
随着函数使用场合的不同,this 的值会发生变化。但是有一个总的原则,那就是this指的是,调用函数的那个对象。
以下是一道面试题:
var a = 10;
var obt = {
a: 20,
fn: function() {
var a = 30;
console.log(this.a)
}
}
采用下面五种方式调用
obt.fn();
obt.fn.call();
(obt.fn)();
(obt.fn,obt.fn)();
new obt.fn();
上面五种操作会依次输出:
20,10,20,10,undefined
第一个不用说,第二个call()函数没有传入参数的情况下会把global作为作用域,第四个跟书本上的赋值操作应该差不多,this不能维持,所以返回全局作用域的a;
第五个new操作会创建一个新的对象,然后将fn函数的作用域指向这个新对象,但是因为这个新对象没有a属性,所以输出undefined。
所以你答对了吗?