Hoy vi una pregunta de prueba que implementa las siguientes funciones de gramática:
var a = add (2) (3) (4); // 9
Esta es la aplicación de una función de orden superior. Análisis: Agregar (2) devolverá una función, add (2) (3) también devolverá una función y finalmente agregará (2) (3) (4) devolverá un valor numérico.
lograr:
function add (num1) {function return (num2) {function de retorno (num3) {return num1+num2+num3;}}} add (2) (3) (4); // 9No hay nada de malo en esto, puede resolver el problema perfectamente.
Optimización: solo la parte sobre las funciones de orden superior se discute aquí. Para mejores soluciones, se pueden implementar llamadas infinitas.
// Método 1 función add (a) {var temp = function (b) {return add (a + b);} temp.valueOf = temp.ToString = function () {return a;}; return temp;} add (2) (3) (4) (5); // 14 // Método 2. Otra forma muy elegante de escribir (de Gaubee): Función Add (num) {num + = ~~ add; add.num = num; return add;} add.ValueOf = add.ToString = function () {return add.num}; var a = add (3) (4) (5) (6); // 18 // Método 2 Comentario: De hecho, es equivalente a, pero se aplica un atributo personalizado a la función para almacenar el valor. ; (function () {var sum = 0; function add (num) {sum+= num; return add;} add.ValueOf = add.ToString = function () {return sum;} window.add = add;}) () var a = add (3) (4) (5) (6); // 18 [/código]Esto es lo que escribí en el artículo que vi en [url = http: //www.cnblogs.com/wengxuesong/p/5577683.html] Blog Garden [/url]. Nunca he entendido el método uno y el método dos, y también intenté generar la función 9 de [código = JavaScript, JavaScript, verdadero] en la consola
var temp = function () {} temp.valueOf = function () {return 2;} temp.ToString = function () {return 'hahh';} alert (temp); console.log (2 * temp);Cuando sea necesario convertirse en una cadena, se llamará a ToString, y se llamará a Value cuando debe convertirse a un número.