面试题答案
一键面试- 为什么需要使用
self
变量保存this
引用:- 在JavaScript中,函数的
this
指向取决于函数的调用方式。在内部函数中,this
的值在非严格模式下默认指向全局对象(浏览器中是window
),在严格模式下是undefined
。这里内部函数的调用环境和外部函数func
的调用环境不同,直接在内部函数中使用this
无法访问到obj
的name
属性,所以需要用self
保存外部函数func
中this
(即obj
)的引用,以确保在内部函数中能正确访问obj
的name
属性。
- 在JavaScript中,函数的
- 使用箭头函数达到同样效果的代码修改:
var obj = {
name: 'example',
func: function() {
return () => {
console.log(this.name);
};
}
};
var newFunc = obj.func();
newFunc();
- 箭头函数的
this
绑定规则与普通函数的不同:- 普通函数:
this
的指向在函数被调用时确定,取决于函数的调用方式。常见情况有:- 作为对象的方法调用时,
this
指向该对象,如obj.func()
,func
函数中的this
指向obj
。 - 独立调用时,在非严格模式下
this
指向全局对象(浏览器中是window
),在严格模式下this
是undefined
。 - 使用
call
、apply
、bind
方法调用时,this
指向传入的第一个参数。
- 作为对象的方法调用时,
- 箭头函数:箭头函数没有自己的
this
,它的this
继承自外层作用域(词法作用域)。箭头函数中的this
在定义时就确定了,不会因为调用方式的改变而改变。比如上述代码中,箭头函数定义在func
函数内部,它的this
就继承自func
函数的this
,所以能正确访问obj
的name
属性。
- 普通函数: