JavaScript中函数声明的区别
我读了一些关于模块化JavaScript编程的信息,但是我没有发现JavaScript中函数声明的区别,javascript,object,module,Javascript,Object,Module,我读了一些关于模块化JavaScript编程的信息,但是我没有发现newfunction(){}声明的优点 以下两种声明的主要区别是什么: var obj = {}; obj.calculate = new function () {}; 及 我想,如果有人能举例说明的话。当然,网络上有很多信息,但我还没有找到一个可以用简单的方式(通过示例)解释的信息。如果与命名函数进行比较,语法更容易理解。如果f是一个函数 f与function(){}比较;这只是对函数的引用 f(x)与function(
newfunction(){}
声明的优点
以下两种声明的主要区别是什么:
var obj = {};
obj.calculate = new function () {};
及
我想,如果有人能举例说明的话。当然,网络上有很多信息,但我还没有找到一个可以用简单的方式(通过示例)解释的信息。如果与命名函数进行比较,语法更容易理解。如果
f
是一个函数
与f
比较;这只是对函数的引用function(){}
与f(x)
比较;这是一个带有参数的函数调用function(){}(x)
与newf
比较;这将调用构造函数newfunction(){}
与newf(x)
相比;这将使用参数调用构造函数newfunction(){}(x)
function MyFunction() {
console.log("This is a normal function.")
}
var f1 = MyFunction;
var f2 = function() {
console.log("This is an anonymous function.")
}
console.log("f1 is a", typeof f1)
// f1 is a function
console.log("f2 is a", typeof f2)
// f2 is a function
在下一个示例中,有一个名为MyConstructor的构造函数,用于创建新对象o1,还有一个匿名构造函数,用于创建新对象o2
function MyConstructor() {
console.log("This is a constructor.")
this.member = "created with MyConstructor"
}
var o1 = new MyConstructor;
var o2 = new function() {
console.log("This is an anonymous constructor.")
this.member = "created with an anonymous constructor"
}
console.log("o1 is an", typeof o1, o1.member)
// "o1 is an object created with MyConstructor"
console.log("o2 is an", typeof o2, o2.member)
// "o2 is an object created with an anonymous constructor"
现在您可以使用obj.calculate.value
访问value
,value
是obj.calculate
对象的参数
var obj = {};
obj.calculate = function () { this.value = "string"; };
除非通过
obj.calucate()
执行分配给obj.calucate
的函数,否则无法访问value
。执行后,value
成为obj
notobj的参数。calculate
new foo
调用foo
作为构造函数,并返回foo
的新实例foo
仅引用函数foo
。差别很大。在第一个示例中,obj.calculate
是一个对象。在第二个例子中,它是一个函数。也不确定你在哪里看到过新函数(){},但我认为它并不常见。如果它是一个对象,为什么不直接使用obj.calculate={}
?正如我所说,我怀疑新函数(){}本身是否常见。如果在某个地方使用它,那么作者要么有很好的理由,不能仅仅通过查看那行代码来确定,要么他们对自己在做什么一无所知。作者用JavaScript开发了几年,他在API中使用了JavaScript,他以这种方式开始了API声明。由于代码的机密性,我无法共享该代码。您可以编写var f2=function(){this.member=“this is constructor”}
,然后调用var o2=new f2()
将向您返回一个对象。
var obj = {};
obj.calculate = new function () { this.value = "string"; };
var obj = {};
obj.calculate = function () { this.value = "string"; };