Javascript:向我解释一下这个语法

Javascript:向我解释一下这个语法,javascript,syntax,Javascript,Syntax,这里是JS新手,我最近浏览了一些使用我不太熟悉的语法的代码。下面是一个例子,然后是我的问题: function Group(args) { this.showItem = showItem; function showItem(args) { ... } } var group = new Group (args); 问题: 据我所知,创建函数组,然后通过Group=new Group实例化本质上是定义一个类,然后实例化该类的对象的原型等价物。对吗 关于组的属性(方法?),

这里是JS新手,我最近浏览了一些使用我不太熟悉的语法的代码。下面是一个例子,然后是我的问题:

function Group(args) {
  this.showItem = showItem;
  function showItem(args) {
    ...
  }
}
var group = new Group (args);
问题:

  • 据我所知,创建
    函数组
    ,然后通过
    Group=new Group
    实例化本质上是定义一个类,然后实例化该类的对象的原型等价物。对吗

  • 关于
    的属性(方法?),上面的
    showItem
    语法叫什么?为什么不将其定义为:

    this.showItem = function(args){...};
    
    将代码更改为上述内容会改变任何不同的行为吗

  • 如果您确实如上所述定义了它,那么该语法叫什么

  • 函数被用作构造函数;你的直觉基本上是正确的

  • 没有理由不使用像
    this.showItem=function(args){…}这样的匿名函数表达式,除非您希望重用局部变量
    showItem

  • 我不知道你指的是哪种语法。
    函数(args){…}
    是一个匿名函数表达式,
    this.showItem
    指的是对象
    this
    的成员。综上所述,我想你可以称之为“设置对象的成员函数”

  • 额外提示(您可能已经知道了?):在定义showItem之前,您可以使用它的原因是什么

    编辑:

    您似乎在询问命名函数和匿名函数。主要区别是:

    • 函数声明总是独立的。它们绝不是其他操作的一部分,例如任务。第一个示例使用函数声明
      函数showItem(args){…}
      。函数表达式在某些操作中用作表达式(例如赋值、作为参数传递等)。第二种情况使用函数表达式

    • 函数声明被提升到当前函数作用域的顶部,因此在第一种情况下定义了
      showItem
      ,并在分配操作中使用函数时包含该函数。函数表达式未被提升

    • 函数声明总是命名的。函数表达式可以是命名的或匿名的。使用名称定义函数时,该名称可作为函数对象的
      name
      属性访问。函数的名称是不可变的,并且与包含函数引用的任何变量无关。此外,函数体中的代码可以将函数名作为局部变量引用(这有时对于命名函数表达式中的递归非常有用)

    审查:

    • 函数定义:
      函数showItems(args){…}
    • 匿名函数表达式:
      this.showItems=function(args){…}
    • 命名函数表达式:
      this.showItems=函数showItemsName(args){…}
    在第一种情况下,定义了一个名为
    showItems
    的局部变量,
    showItems
    的定义被提升到顶部。后两种情况的区别在于,对于第三种情况,
    this.showItems.name
    将为“
    showItemsName
    ”,对于第二种情况,
    未定义。另外,
    showItemsName
    将是第三个函数的函数体中的局部变量,该函数体包含对函数对象的引用

  • 函数被用作构造函数;你的直觉基本上是正确的

  • 没有理由不使用像
    this.showItem=function(args){…}这样的匿名函数表达式,除非您希望重用局部变量
    showItem

  • 我不知道你指的是哪种语法。
    函数(args){…}
    是一个匿名函数表达式,
    this.showItem
    指的是对象
    this
    的成员。综上所述,我想你可以称之为“设置对象的成员函数”

  • 额外提示(您可能已经知道了?):在定义showItem之前,您可以使用它的原因是什么

    编辑:

    您似乎在询问命名函数和匿名函数。主要区别是:

    • 函数声明总是独立的。它们绝不是其他操作的一部分,例如任务。第一个示例使用函数声明
      函数showItem(args){…}
      。函数表达式在某些操作中用作表达式(例如赋值、作为参数传递等)。第二种情况使用函数表达式

    • 函数声明被提升到当前函数作用域的顶部,因此在第一种情况下定义了
      showItem
      ,并在分配操作中使用函数时包含该函数。函数表达式未被提升

    • 函数声明总是命名的。函数表达式可以是命名的或匿名的。使用名称定义函数时,该名称可作为函数对象的
      name
      属性访问。函数的名称是不可变的,并且与包含函数引用的任何变量无关。此外,函数体中的代码可以将函数名作为局部变量引用(这有时对于命名函数表达式中的递归非常有用)

    审查:

    • 函数定义:
      函数showItems(args){…}
    • 匿名函数表达式:
      this.showItems=function(args){…}
    • 命名函数表达式:
      this.showItems=函数showItemsName(args){…}
    在第一种情况下,t
    function Group(args){}
    Group.prototype.showItem = function(args) {};
    
    var myfunc1 = function(){};
    var myfunc2 = function MyFunctionName(){};
    
    function() {
        function foo(){} // function declaration
        if (1) {
            function bar(){} // function STATEMENT--not standard JS!
        }
    }
    
    function() {
        var bar;
        if (1) {
            bar = function bar(){};
        }
    }