Я наткнулся на некоторый код здесь , где конструктор 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
, не приводит к ошибке SyntaxError.
Я посмотрел на MDN , но не смог найти четкую информацию о том, как это будет использоваться.
И действительно ли это JS или реализация двойных скобок в разных браузерах различается?