该Group
函数被用作构造函数;你的直觉基本上是正确的。
没有充分的理由不使用匿名函数表达式this.showItem = function(args){...};
,除非您想重用局部变量showItem
。
我不确定你的意思是哪种语法。是function(args){...}
一个匿名函数表达式,并且this.showItem
是指对象的一个成员this
。综上所述,我想您可以将其称为“设置对象的成员函数”。
额外提示(也许您已经知道?):您可以showItem
在定义之前使用它的原因是由于函数提升。
编辑:
您似乎在询问函数表达式与函数声明以及命名函数与匿名函数。主要区别是:
函数声明总是独立存在的。它们绝不是另一个操作的一部分,例如赋值。您的第一个示例使用函数声明function showItem(args) {...}
。函数表达式在某些操作中用作表达式(例如,赋值、作为参数传递等)。您的第二种情况使用函数表达式。
函数声明被提升到当前函数作用域的顶部,因此showItem
在您的第一种情况下,当您在赋值操作中使用它时,定义并包含该函数。函数表达式没有被提升。
函数声明总是被命名的。函数表达式可以命名或匿名。当使用名称定义函数时,该名称可作为name
函数对象的属性访问。函数的名称是不可变的,并且独立于任何持有对该函数的引用的变量。此外,函数体内的代码可以通过函数名称将函数称为局部变量(这有时对命名函数表达式内的递归很有用)。
回顾:
- 函数定义:
function showItems(args){...};
- 匿名函数表达式:
this.showItems = function(args){...};
- 命名函数表达式:
this.showItems = function showItemsName(args){...};
在第一种情况下,有一个名为showItems
defined 的局部变量,并且 的定义showItems
被提升到顶部。后两种情况的区别在于第三种情况和第二种情况this.showItems.name
将是“ ”。此外,将是第三个函数的函数体内的一个局部变量,它保存对函数对象的引用。showItemsName
undefined
showItemsName