今天,有個同學問我乙個問題:
add(1) //1
add(1)(2) //3
add(1)(2)(3) //返回6
我想了半天,實在想不出來,在我看來, 這是矛盾的,
因為通過add(1)(2)返回3,要求add(1)的返回值是乙個函式,才能接收引數2,但是add(1)卻是1,不管是字串還是數字,這都是不可能的。
後來看了答案,才恍然大悟,原來這列印出來的函式的執行結果,必須呼叫tostring方法。
1function demo(...args)
8 fn.tostring =function ()
11return
fn;//第一次執行時才會執行,以後的所有執行都是執行fn函式;
12 }
第二個同學問我的問題是:如何用最簡單的**實現快速排序;
快速排序的思想是:對一組數字,進行兩步走:先找出參照物(通常是第乙個),其次遍歷這組數,比參照物大的放右面,比參照物小的放左邊, 然後遞迴對左右快速排序。**實現如下:
1var arr = [5, 2, 6, 4, 3, 8, 7, 1];
2function
sort(arr) else14}
15return
sort(left).concat(leader).concat(sort(right))//遞迴遍歷左右兩個陣列16}
17 console.log(sort(arr));
equals方法和toString方法
object類中有兩個比較重要的方法 equals 和 tostring 如下 public boolean equals object obj public string tostring string類中重寫了這兩個方法,如下 public boolean equals object anobj...
toString方法 和equals方法
我們通常在控制台輸出時使用system.out.print print只能直接輸出基本型別和字串,對於其他的型別直接輸出將會輸出 開頭的引用 位址 因此若需要輸出對應的內容則需要使用tosring方法。tostring方法屬於object,object是所有類的頂級父類,所以所有類都繼承了tostr...
閉包的特點和判斷閉包的執行結果
全域性變數和區域性變數都有缺點,全域性變數容易造成全域性汙染,而區域性變數則無法共享,不能長久儲存,為了使變數既可以共享,長久儲存,又不會全域性汙染,可以使用閉包。閉包的三個特點是 1.定義外層函式,封裝被保護的區域性變數 2.定義內層函式,執行對外層函式區域性變數的操作 3.外層函式返回內層函式的...