這是一道綜合性的題目,如果你能快速清晰的分析整理出來,那我相信你對JavaScript是有一定的理解的了。我會先將題目的圖片截取出來,供大家思考,在結尾在給出我的分析過程和答案,作個總結。
好,廢話不多說啦,我們馬上來看看!
好,希望大家現在好好思考一下,result的值會是多少。下面我會給出答案。
我們用node打印一下看看
答案是 -2,親愛的朋友們,你做對了嗎?
下面我將寫出我對這題的思路解析,僅供參考噢。
我們直接看到函數調用 partialFn(f, 2) ,這里的意思就是傳入兩個參數啦,一個是函數指針,另一個是2。接下來就看到 partialFn函數,首先就是定義了 args的變量,用於存放傳入參數的實參對象 arguments。arguments 是函數的實際參數的引用,即使形參沒有定義。那這樣的話,args 的值應該是 {"0" : "[function]", "1" : 2}。然后 partialFn 函數就結束,並且return出一個匿名函數(閉包的前兆啊!),緊接着這個匿名函數就被調用了,傳入了(3, 4)兩個參數。
我們接着看返回的匿名函數里有什么。首先匿名函數里,定義了一個 a 變量用於存放 array 函數返回的值,array 函數傳入了兩個參數,一個是它的父函數的變量args(果然嘛,閉包來了),這里形成了一個閉包,args的值會保存在內存中。另一個參數是1。
那就往 array 的函數里看,兩個形參,然后是 call 一個數組的 slice 方法,第一個參數作為執行 slice 函數的對象,也就是 args ,然后下一個參數就是 slice 的參數,那這里的意思就是從序號 1 一直截到尾,然后返回截取到的數組。那這里就是說, args 對象執行一個數組的 slice 方法,然后從第二個截取到末尾,返回了一個數組 [2],存入變量 a 中。好,把 array 實際要做什么的弄懂了,我們接着看。
這里又用了一次 array 函數,但是只傳了一個參數 arguments,切記這個 arguments 已經不是第一次我們見到的 arguments了,這個是 arguments 里是傳入的3和4。那自然這里就僅僅是將對象轉換成數組返回出來 [3, 4]。接下來就簡單易懂啦,讓數組 a 和 這個數組進行 concat 方法,再保存在變量 a 中,此時 a 就是[2, 3, 4]。
最后使用 apply 方法,第一個參數 this 也就是本身啦,然后第二個參數是將數組 a 當作參數傳入 f 函數里,嗯,小學生的計算時刻 2*(3-4) = -2,別告訴這你不會做啊!
完結撒花!希望這篇博文可以幫助 JavaScript 基礎知識不扎實的同學們,能有更高的認識。高手們,可以過過癮,裝裝逼。
對了,還是那句話,有錯誤請指出,我會盡快修改,以免誤人子弟。