JavaScript 函数上下文不正确

2024-03-03

我注意到 javascript 中有一个奇怪的事情。考虑以下几点:

var fn = ''.toUpperCase.call
console.log(typeof fn); // "function"
fn(); // Uncaught TypeError: `fn` is not a function

上面的代码是在我的 Chrome 开发者控制台上执行的。版本是43.0.2357.81 m.

The typeof运算符清楚地表明fn是一个函数,但错误表明并非如此。

我注意到了Function.apply至少显示一些有意义的错误消息。

那么,什么时候是函数,而不是函数呢?


Javascript 中的上下文总是由你的方式建立的call一个函数。

var fn = ''.toUpperCase.call

这指定了原型实现call功能为fn。如果你现在打电话fn(),调用没有上下文。call将尝试调用与其关联的函数对象。然而,该上下文是在调用时建立的。由于您在调用时没有为其提供任何上下文,因此某些内部组件call正在抛出一个错误。

你必须这样做:

fn.call(''.toUpperCase)

没错,你call the call函数,建立上下文,即toUpperCase字符串函数。在这种特定情况下,这会导致内部出现另一个错误toUpperCase, since it不受特定上下文的约束。您还需要明确建立该上下文:

var fn = ''.toUpperCase.call
fn.call(''.toUpperCase.bind(''))

另请参阅“this”关键字如何工作? https://stackoverflow.com/q/3127429/476

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript 函数上下文不正确 的相关文章

随机推荐