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