JavaScript中函数声明的区别

JavaScript中函数声明的区别,javascript,object,module,Javascript,Object,Module,我读了一些关于模块化JavaScript编程的信息,但是我没有发现newfunction(){}声明的优点 以下两种声明的主要区别是什么: var obj = {}; obj.calculate = new function () {}; 及 我想,如果有人能举例说明的话。当然,网络上有很多信息,但我还没有找到一个可以用简单的方式(通过示例)解释的信息。如果与命名函数进行比较,语法更容易理解。如果f是一个函数 f与function(){}比较;这只是对函数的引用 f(x)与function(

我读了一些关于模块化JavaScript编程的信息,但是我没有发现
newfunction(){}
声明的优点

以下两种声明的主要区别是什么:

var obj = {};
obj.calculate = new function () {};


我想,如果有人能举例说明的话。当然,网络上有很多信息,但我还没有找到一个可以用简单的方式(通过示例)解释的信息。

如果与命名函数进行比较,语法更容易理解。如果
f
是一个函数

  • f
    function(){}
    比较;这只是对函数的引用
  • f(x)
    function(){}(x)
    比较;这是一个带有参数的函数调用
  • newf
    newfunction(){}
    比较;这将调用构造函数
  • newf(x)
    newfunction(){}(x)
    相比;这将使用参数调用构造函数
在下一个示例中,有一个名为MyFunction的函数,然后存储在f1中,还有一个匿名函数,存储在f2中

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
not
obj的参数。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"; };