<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                1.在函數式編程當中有一個很重要的概念就是函數組合,實際上就是把處理數據的函數像管道一樣連接起來,然后讓數據穿過管道得到最終的結果。例如: 2.const add1 = (x) => x + 1; 3.const mul3 = (x) => x \* 3; 4.const div2 = (x) => x / 2; 5.div2(mul3(add1(add1(0)))) //=>3 6. 7.而這樣的寫法可讀性明顯太差了。我們可以構建一個 compose 函數,它接受任意多個函數作為參數(這些函數都只接受一個參數),然后 compose 返回的也是一個函數,達到以下的效果: 8.const operate = compose(div2, mul3, add1, add1) 9.operate(0) //=>相當于div2(mul3(add1(add1(0)))) 10.operate(2) //=>相當于div2(mul3(add1(add1(2)))) 11. 12.簡而言之:compose 可以把類似于 f(g(h(x))) 這種寫法簡化成 compose(f, g, h)(x)。請你完成 compose 函數的編寫。 13.額外挑戰:你能通過 1~2 行代碼實現 compose 嗎。 ~~~ const add1 = (x) => x + 1; const mul3 = (x) => x * 3; const div2 = (x) => x / 2; //=>把數組拼成字符串,把字符串EVAL了即可 // [div2, mul3, add1, add1] // 'div2(mul3(add1(add1(0))))' // const compose = (...arg) => {//=>不銷毀的棧 // //=>arg:[div2, mul3, add1, add1] // return val => { // //=>fn(0):執行的是小函數,val=0 // let str = ''; // arg.forEach(item => (str += item.name + ',')); // str = str.replace(/,/g, '('); // str += val; // arg.forEach(item => (str += ')')); // return eval(str); // } // }; // let fn = compose(div2, mul3, add1, add1); // console.log(fn(0));//=>div2(mul3(add1(add1(0)))) /* * 柯理化函數編程思想 * 1.執行一個方法,傳遞一些參數進去,首先形成一個不銷毀的棧,把傳遞的這些值存儲起來(沒有立即使用,屬于預先存儲一下) * 2.返回一個小函數給棧外面 * 3.當執行返回的小函數時候,把之前第一步預先存儲的信息拿過來使用(作用域鏈、閉包等機制完成的) * * 我們把JS中基于閉包實現的預先存儲的思想成為 “柯理化函數思想” */ // const compose = (...arg) => { // //=>arg:[div2, mul3, add1, add1] // arg = arg.reverse();//=>[add1, add1,mul3,div2] // return val => { // //=>val:0 // arg.forEach(item => { // val = item(val); // //第一次 add1(0) =>1 =>val=1 // //第二次 add1(1) =>2 =>val=2 // //第三次 mul3(2) ... // }); // return val; // } // }; // let fn = compose(div2, mul3, add1, add1); // console.log(fn(0));//=>div2(mul3(add1(add1(0)))) ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看