JavaScript函数上下文不正确
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了JavaScript函数上下文不正确,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含959字,纯文字阅读大概需要2分钟。
内容图文
![JavaScript函数上下文不正确](/upload/InfoBanner/zyjiaocheng/712/13a2654b265e4d17a8925413b95d2901.jpg)
我注意到javascript中有一个奇怪的东西.考虑以下内容:
var fn = ''.toUpperCase.call
console.log(typeof fn); // "function"
fn(); // Uncaught TypeError: `fn` is not a function
以上内容在我的Chrome开发者控制台上执行.版本是43.0.2357.81米.
typeof运算符清楚地显示fn是一个函数,但错误表明不是这样.
我注意到Function.apply至少显示了一些有意义的错误消息.
那么,什么时候是函数,而不是函数?
解决方法:
Javascript中的上下文始终通过调用函数的方式建立.
var fn = ''.toUpperCase.call
这将调用函数的原型实现分配给fn.如果你现在调用fn(),那么调用没有上下文. call会尝试调用与之关联的函数对象.但是,该上下文是在呼叫时建立的.由于您在呼叫时没有给它任何上下文,因此一些内部调用组件会引发错误.
你必须这样做:
fn.call(''.toUpperCase)
没错,你调用call函数,建立一个上下文,即toUpperCase字符串函数.在这种特定情况下,这将导致toUpperCase内部的另一个错误,因为它没有绑定到特定的上下文.您还需要明确地建立该上下文:
var fn = ''.toUpperCase.call
fn.call(''.toUpperCase.bind(''))
另见How does the “this” keyword work?
内容总结
以上是互联网集市为您收集整理的JavaScript函数上下文不正确全部内容,希望文章能够帮你解决JavaScript函数上下文不正确所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。