面试题答案
一键面试-
添加
'use strict';
对this
绑定的影响:- 在严格模式下,
this
不会进行隐式绑定。在原始代码中,moduleFunction
函数没有在对象方法的调用模式下被调用(例如obj.moduleFunction()
),如果没有'use strict';
,在非严格模式下this
会指向全局对象(浏览器环境下是window
)。 - 当添加
'use strict';
后,由于moduleFunction
不是在对象方法的调用模式下被调用,this
的值会是undefined
。但是这里使用了bind
方法将moduleFunction
绑定到了obj
对象上,所以this
仍然会指向obj
,对boundFunction
的调用结果没有影响,依然会返回objValue
。
- 在严格模式下,
-
修改
obj
定义后调用boundFunction
的返回结果及原因:- 修改
obj
定义为const obj = { value: function() { return this; } };
后,boundFunction
调用的返回结果是obj
对象。 - 原因是
boundFunction
是通过moduleFunction.bind(obj)
创建的,它的this
已经被绑定到了obj
。当调用boundFunction
时,实际上是调用绑定到obj
的moduleFunction
,而moduleFunction
此时返回this
,由于this
已经被bind
绑定到了obj
,所以返回的就是obj
对象。
- 修改