今日、私は次の文法機能を実装するテストの質問を見ました。
var a = add(2)(3)(4); // 9
これは、高次関数の適用です。分析:追加(2)は関数を返し、追加(2)(3)は関数も返し、最後に(2)(3)(4)は数値を返します。
成し遂げる:
function add(num1){return function(num2){return function(num3){return num1+num2+num3;}}} add(2)(3)(4); // 9これには何の問題もありません。問題を完全に解決できます。
最適化:ここでは、高次関数に関する部分のみについて説明します。より良いソリューションのために、無限の呼び出しを実装できます。
// function add(a){var temp = function(b){return add(a + b);} temp.valueof = temp.tostring = function(){return a;}; return temp;} add(2)(4)(5); // 14 //方法2。 = num; return add;} add.valueof = add.toString = function(){return add.num}; var a = add(3)(4)(5)(6); // 18 //方法2コメント:実際、それは同等ですが、値を保存するために関数にカスタム属性が適用されます。 ;(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 [/code]これは、[url = http://www.cnblogs.com/wengxuesong/p/5577683.html] blog garden [/url]で私が見た記事で書いたものです。メソッド1とメソッド2を理解したことはありません。また、コンソールに[code = javascript、javascriptコード、true]関数9を出力しようとしました。
var temp = function(){} temp.valueof = function(){return 2;} temp.tostring = function(){return 'hahh';} alert(temp); console.log(2 * temp);文字列に変換する必要がある場合、ToStringが呼び出され、ValueOFは数値に変換する必要がある場合に呼び出されます。