【问题标题】:Why declare anonymous function and then assign to variable? [closed]为什么要声明匿名函数然后分配给变量? [关闭]
【发布时间】:2019-03-27 20:57:10
【问题描述】:

有人可以解释为什么我们创建一个函数然后使用'let'将匿名函数分配给一个变量吗?这样写有什么意义?

function buildName(firstName: string, ...restOfName: string[]) {
    return firstName + " " + restOfName.join(" ");
}

let buildNameFun: (fname: string, ...rest: string[]) => string = buildName;

【问题讨论】:

  • 因为打字少?
  • 没有上下文很难说出原因。也许他们想为同一个函数取两个名字?
  • this 对象的上下文。通过参考获得更好的理解developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • @Suryan 但该函数不以任何方式使用this...
  • @NurbolAlpysbayev 我的意思是箭头函数没有自己的 this 而是总是指向包含函数的对象

标签: javascript typescript ecmascript-6 let


【解决方案1】:

我有几个猜测:

  • 有人根本不关心资源(CPU、磁盘)
  • 有人想看起来很花哨(通过添加箭头功能而没有任何正当理由)

说真的,没有充分的理由这样做。

【讨论】:

  • 资源差异为零。
  • @loganfsmyth 我同意这对性能的影响几乎为零,但当然,不完全为零。因为,如果按照您的逻辑创建数百万个无用的变量,则不会对程序大小和解析此类代码的速度产生任何影响。但我看到你有大约 100 000 个分数,我可以推断你的真正意思是“这方面的资源几乎零差异”。
  • 函数声明和分配给变量的函数都创建了一个包含单个函数的变量。内存和资源是一样的。
  • @loganfsmyth 我相信如果你有能力获得这方面的知识,你也可以再读一遍,发现我没有提到内存,而是 size 和 解析此类代码的速度。大小与磁盘资源有关,解析速度与 CPU 相关(哦,内存也是如此,但以另一种方式)。
  • 有些事情不合理,这样做是有害的。有时,做某事的方法有很多种,但没有一种比其他方法更好。这个问题完全是基于意见的。有很多理由有偏好,但很少有理由认为它很重要。
【解决方案2】:

我会说这是因为您必须将箭头函数分配给变量才能在其他地方使用它。 There are couple of differences between arrow functions and es5 functions 所以如果有人需要箭头函数功能,这是他或她可以声明它的唯一方法。

另外,请记住 letconst 不会被提升,这与通过 function 关键字声明的函数相反。

foo() // this will work
function foo () {
  console.log('foo')
}
bar() // this will not
let bar = () => console.log('bar');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多