Javascript 新函数()和新函数()之间的区别()

Javascript 新函数()和新函数()之间的区别(),javascript,function,constructor,parentheses,Javascript,Function,Constructor,Parentheses,我遇到了一些代码,其中函数构造函数是以一种有趣的方式调用的: var jscriptVersion; // ...some code jscriptVersion = new Function("/*@cc_on return @_jscript_version; @*/")(); 起初我认为额外的括号是一个错误,但在控制台中测试了一点之后,我认为这可能是获取返回值的快捷方式: var a = new Function("return 'abc'"); var b = new Function

我遇到了一些代码,其中函数构造函数是以一种有趣的方式调用的:

var jscriptVersion; // ...some code
jscriptVersion = new Function("/*@cc_on return @_jscript_version; @*/")();
起初我认为额外的括号是一个错误,但在控制台中测试了一点之后,我认为这可能是获取返回值的快捷方式:

var a = new Function("return 'abc'");
var b = new Function("");
var c = new Function("")();
var d = new Function("return 'xyz'")();

console.log(a, typeof a);  // f anonymous() { return 'abc' } , function
console.log(b, typeof b);  // f anonymous() { } , function
console.log(c, typeof c);  // undefined , undefined
console.log(d, typeof d);  // xyz , string
我猜
d
在功能上(除了
new
关键字外,几乎与以下内容相同):

var d2 = function() { return 'xyz' }(); console.log(d2); // xyz
但我也从未见过函数表达式后面的括号不是IIFE,我很惊讶定义
d2
的代码没有导致语法错误

我看了一下,但找不到关于如何使用它的明确信息


这是有效的JS还是双括号的实现在不同浏览器中有所不同?

新函数
后面的括号将立即调用该函数。它与IIFE基本相同,只是调用的函数是根据传递的字符串动态构造的-
新函数
返回一个函数,如果后跟
()
,该函数将立即运行

var a=新函数(“返回'abc'”);
var b=新函数(“”);
var c=新函数(“”();
var d=新函数(“返回'xyz'”)();
console.log(a,类型a);//f anonymous(){return'abc'},函数
//因为这是从'return'abc'字符串构造的函数
console.log(b,类型b);//f匿名(){},函数
//因为传递的字符串为空,所以从新函数返回的函数为空
console.log(c,类型c);//未定义,未定义
//因为调用空函数时不会返回任何内容:
//x=(()=>{
// })();
//x是未定义的
console.log(d,类型d);//xyz,字符串
//因为构造的函数体返回'xyz'字符串

//构造的函数被立即调用
当你有一个函数返回一个内部函数,该函数将在其他地方执行时,你就可以这样做了。
function(){return'xyz'}()
将是一个语法错误,但
var d2=function(){return'xyz'}()是作为函数表达式而不是函数语句计算的。