Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript “后面的括号;新<;功能>&引用;可选的?_Javascript_Initialization_New Operator - Fatal编程技术网

Javascript “后面的括号;新<;功能>&引用;可选的?

Javascript “后面的括号;新<;功能>&引用;可选的?,javascript,initialization,new-operator,Javascript,Initialization,New Operator,我在Chrome控制台中运行了以下两个代码段,结果相同: test = new function(){ var a = 1; var b = 2; var c = 3; this.debugBase = function(){console.log('' + a + b + c)}; }; test debugBase: function (){console.log('' + a + b + c)} __proto__: Object 与: test2 = new (func

我在Chrome控制台中运行了以下两个代码段,结果相同:

test = new function(){
  var a = 1;
  var b = 2;
  var c = 3;
  this.debugBase = function(){console.log('' + a + b + c)};
};
test
debugBase: function (){console.log('' + a + b + c)}
__proto__: Object
与:

test2 = new (function(){
  var a = 1;
  var b = 2;
  var c = 3;
  this.debugBase = function(){console.log('' + a + b + c)};
})();
test2
debugBase: function (){console.log('' + a + b + c)}
__proto__: Object

我错过什么了吗?函数后面的括号有什么意义吗?如果没有,为什么人们要把它们放在那里?

把这些偏执狂放在那里实际上是在运行这个功能。没有它们,函数只是定义的

编辑:我没有注意到您使用的“新建”关键字。在这两种情况下都会调用您的函数。不过,这里通常不需要新的关键字。在您给出的示例中,它们基本相同,末尾的括号是多余的

请看这个jsfiddle了解我的意思()


如果您运行它,您将看到只调用第二项。

因为您可以像这样传递参数,例如

var x = new String(5); // '5'

除此之外,这是一个偏好的问题。

这里也提出了类似的问题:。Daniel Vassallo完整且公认的答案:

引述1:

作为特例,仅对于
new
操作符,JavaScript通过允许在函数调用中没有参数时省略括号简化了语法。以下是使用
新的
运算符的一些示例:

o = new Object;  // Optional parenthesis omitted here
d = new Date();  

就我个人而言,我总是使用括号,即使构造函数没有参数

此外,如果省略括号,可能会伤害您的感情。它报告调用构造函数的
缺少“()”,
,并且该工具似乎没有允许省略括号的选项


1大卫·弗拉纳根:(第75页)


但是从控制台的输出来看,不管怎样,对象都是实例化的。