javascript - 为什么这 => 不将 "this"绑定(bind)到周围的范围?

标签 javascript node.js ecmascript-6

我采取了以下code来自 MDN。

x = 9  
var module = {
  x: 81,
  getX: () => this.x
} 

var getX = module.getX 
console.log(getX())

我得到 9:

alex@alex-K43U:~/node/es6$ iojs --harmony_arrow_functions index.js
9

不应该 this 受其词法范围限制并输出 81 吗?

最佳答案

虽然下面的原始答案是正确的并且 v8 不保证 - ES6 箭头有 词法 this - 这意味着 this 被绑定(bind)到周边范围。您的对象字面量不是作用域。

如果你有这样的代码:

var obj = {};
obj.x = 5;
obj.foo = () => this.x;
obj.foo();

具有词法 this 的箭头函数恰恰意味着您不会得到 5 返回,而是从周围的作用域中得到一些东西。这与根据调用者对象确定的常规动态 this 不同。


原文: 因为 v8 有一个有问题的箭头函数实现,而且它在作用域方面还不能正常工作。这就是为什么它首先在一面旗帜后面。

您可以跟踪进度 here in the issue tracker .同时,您可以使用像 BabelJS 这样的转译器作为构建步骤,直到实现功能。

关于javascript - 为什么这 => 不将 "this"绑定(bind)到周围的范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29350022/

相关文章:

javascript - 是否有任何原因导致我无法获取我的页面

javascript - 当 ES6 中存在结构相似性时,减少分配对象属性的冗余

javascript - 将 knex 与 es6 模块一起使用

javascript - 当手动选中/取消选中任何目标复选框时,以编程方式检查所有复选框无法正常工作

javascript - this.href 不返回 href

javascript - NPM 包最后输出信息

javascript - 滑动导航箭头

javascript - 我如何循环ajax请求(使用jquery)和jsp

javascript - 客户端发送值到node.js并设置为cookie

node.js - 如何包装 axios 函数并让父级等待?