首页 > web前端 > js教程 > 为什么'bind()”不能与箭头函数'this”一起使用?

为什么'bind()”不能与箭头函数'this”一起使用?

Barbara Streisand
发布: 2024-12-13 17:07:09
原创
771 人浏览过

Why Doesn't `bind()` Work with Arrow Functions' `this`?

在箭头函数中绑定“this”的难题:揭开困境

尽管箭头函数具有诱人的简单性,但它们关于 '这让很多开发者感到困惑。无法将“this”绑定到箭头函数中的特定上下文已成为反复出现的挫败感来源。

为了说明这一困境,请考虑以下代码:

const f = () => console.log(this);

const o = { a: 42 };

const fBound = f.bind(o);

fBound(); // Expected: { a: 42 }, Actual: { window: Window }
登录后复制

在此示例中,我们尝试使用“bind()”方法将箭头函数“f”的“this”上下文绑定到对象“o”。然而,调用“fBound()”会莫名其妙地记录全局“window”对象,而不是预期的“o”对象。

这种令人困惑的行为根源于箭头函数的固有性质。与具有自己的“this”上下文的常规函数​​不同,箭头函数从周围的词法范围继承其“this”绑定。在本例中,“f”是在全局范围内定义的,将“this”呈现为绑定到全局“window”对象。

ECMAScript 2015 规范明确指出:

“任何引用ArrowFunction 中的参数、super、this 或 new.target 必须解析为词法封闭的绑定环境。”

因此,在箭头函数中重新绑定“this”是不可能的。 “this”将永远锚定在定义箭头函数的上下文中。

如果“this”的有意义使用对您的代码至关重要,那么谨慎的做法在于使用常规函数而不是使用常规函数箭头函数。常规函数可以更好地控制“this”绑定,使您能够使用“bind()”或其他方法将“this”显式绑定到所需的上下文。

以上是为什么'bind()”不能与箭头函数'this”一起使用?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板