【发布时间】:2016-11-06 20:30:37
【问题描述】:
我正在做一个关于 Typescript 词法范围处理的教程,我遇到了一个我以前从未见过的函数的用法。在 forEach 语句中看起来像一个空函数。在打字稿中它看起来像这样:
fns.forEach(fn=>fn());
在 javascript 中它看起来像:
fns.forEach(function (fn) { return fn(); });
我从未见过这样使用的函数。有人可以解释这是如何工作的吗?具体来说, fn=>fn() 实际执行的是什么。参考下面的代码,它是执行 fns.push 还是 for 循环?如果是 For 循环就没有引用 this 那它怎么知道呢?
以下是完整代码:
TypeScript:
var fns = [];
for(var i=0;i<5;i+=1){
fns.push(function(){
console.log(i);
})
}
fns.forEach(fn=>fn());
JavaScript
var fns = [];
for (var i = 0; i < 5; i += 1) {
fns.push(function () {
console.log(i);
});
}
fns.forEach(function (fn) { return fn(); });
【问题讨论】:
-
什么这么复杂?它执行数组中的每个函数。但是,由于关闭问题,您的示例将不起作用。尝试将
for循环中的var更改为let。此外,虽然与您的问题无关,但箭头函数并不是 TypeScript 特有的——它们只是普通的旧 ES6。