“这个”永远不会成为对象吗?

时间:2019-01-14 01:45:43

标签: javascript

在一次采访中被问到这一点:这个函数永远不会返回“对象”吗?

function foo() { return typeof this; }

我说不确定,但是我猜到了

foo.bind(undefined)()

可能会返回'undefined'。但是无法在我的控制台中在家测试它。

1 个答案:

答案 0 :(得分:6)

在严格模式下,this被强制转换为对象:

'use strict';
function foo() { return typeof this; }

console.log(foo.call('abc'));
console.log(foo.call(5));

(但这是要尝试的真的很奇怪的事情,我希望永远不要在严肃的代码中看到它)

如果没有调用上下文,在严格模式下,

this也可以undefined

'use strict';
function foo() { return typeof this; }

console.log(foo());

在草率模式下,似乎函数没有被强制转换为对象(尽管基元 do ):

function foo() { return typeof this; }

console.log(foo.call(() => 'abc'));