我能想到的三个主要原因:
- 父范围访问
- 隐私
- 减少较高范围中定义的名称
父作用域访问:内联函数定义允许内联代码访问父作用域中定义的变量。这对许多事情都非常有用,并且如果正确完成的话,可以减少代码的数量或复杂性。
如果将代码放入此范围之外定义的函数中,然后调用该代码,则必须传递要访问该函数的任何父状态。
隐私:内联匿名定义中的代码更具私密性,其他代码无法调用。
减少在较高作用域中定义的名称: 在全局作用域中操作时,这是最重要的,但是内联匿名声明使您不必在当前作用域中定义新的符号。由于Javascript本身并不要求使用名称空间,因此避免定义比最低要求更多的全局符号是明智的。
社论:在Javascript中似乎已经成为一种文化,在这种情况下,即使不使用父级作用域访问,以某种方式声明匿名内联比定义一个函数并调用它也被认为“更好”。我怀疑这最初是由于Javascript中的全局名称空间污染问题,然后可能是由于隐私问题。但是现在它已变成某种文化上的东西,您可以看到它在许多公共代码机构中表达(如您提到的代码)。
在像C ++这样的语言中,大多数人可能会认为拥有一个跨多个页面/屏幕的巨大功能不是一种理想的做法。当然,C ++具有内置的命名空间,不提供父范围访问,并且具有隐私功能,因此它可以完全由可读性/可维护性来激发,而Javascript必须使用代码表达式来实现隐私和父范围访问。因此,JS似乎是朝着不同的方向发展的,即使在特定情况下不需要激发该方向的事物,它在语言中也已成为一种文化事物。