为什么使用–harmony在Node.js中抛出一个错误?

在Chrome Canary和Node.js 0.12.3中,以下代码打印出p

  'use strict'; let o = { name: 'o', foo: function() { ['1'].map(function() { console.log(this.name); }.bind(this)); }, }; let p = { name: 'p' }; o.foo.call(p); // p 

在Chrome Canary中,以下代码也会打印出p 。 但为什么它会抛出一个types错误在Node.js 0.12.3与–harmony标志?

  'use strict'; let o = { name: 'o', foo: function() { ['1'].map(() => { console.log(this.name); }); }, }; let p = { name: 'p' }; o.foo.call(p); // p in Chrome, TypeError in Node.js with --harmony 

换句话说,为什么在Node.js中运行第二个代码片段时,这是undefined的?

这只是由于 iojs和节点使用的V8引擎版本中的一个错误 。 Chrome Canary使用了解决此问题的不稳定版本的V8。 当这个固定版本推出到稳定版本的V8时,node / iojs应该以相同的方式工作。

现在,您可以使用像babel这样的工具来传输代码。 在你的代码中使用没有标志的babel来转换:

 function foo() { var _this = this; ['1'].map(function () { console.log(_this.name); }); } 

这确实打印页面。