node.js 中的箭头函数上下文
Arrow function context in node.js
使用箭头函数的 MDN 文档中的以下示例,位于 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions
function Person(){
this.age = 0;
setInterval(() => {
this.age++; // |this| properly refers to the person object
}, 1000);
}
var p = new Person();
当我 copy/paste 将代码写入 node.js 0.12 node --harmony
时,this.age++;
行似乎没有引用 Person
上下文,但是而是 setInterval
上下文。在回调中添加 console.log(this)
似乎证实了这一点。
当我使用其他 es6->es5 转译器时,它总是按预期工作。这是 node.js 中的错误吗?我错过了什么吗?
编辑:也许是这个原因?
不同的是,他们在讨论 Chrome 而这个问题是关于 Node.js。根据 http://kangax.github.io/compat-table/es6/#arrow_functions 他们有不同级别的 ES6 支持,即使他们都使用 V8。
似乎是因为 V8 尚未更新以支持词法this
。
使用箭头函数的 MDN 文档中的以下示例,位于 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions
function Person(){
this.age = 0;
setInterval(() => {
this.age++; // |this| properly refers to the person object
}, 1000);
}
var p = new Person();
当我 copy/paste 将代码写入 node.js 0.12 node --harmony
时,this.age++;
行似乎没有引用 Person
上下文,但是而是 setInterval
上下文。在回调中添加 console.log(this)
似乎证实了这一点。
当我使用其他 es6->es5 转译器时,它总是按预期工作。这是 node.js 中的错误吗?我错过了什么吗?
编辑:也许是这个原因?
不同的是,他们在讨论 Chrome 而这个问题是关于 Node.js。根据 http://kangax.github.io/compat-table/es6/#arrow_functions 他们有不同级别的 ES6 支持,即使他们都使用 V8。
似乎是因为 V8 尚未更新以支持词法this
。