js能力測評經典題分析(二)函式

2021-08-21 19:25:25 字數 3855 閱讀 9556

1、請修復給定的 js **中,函式定義存在的問題

//看返回值 getvalue(),原本的函式定義便不符合需求,以變數的形式儲存,方便呼叫

function functions(flag) //function getvalue()

} else //function getvalue()

}return getvalue();

}

2、修改 js **中 parseint 的呼叫方式,使之通過全部測試用例。

如輸入:'12px',輸出:12

function parse2int(num) 

return parseint(num.slice(0,i));

}

3、實現乙個打點計時器,要求

(1)、從 start 到 end(包含 start 和 end),每隔 100 毫秒 console.log 乙個數字,每次數字增幅為 1

(2)、返回的物件中需要包含乙個 cancel 方法,用於停止定時操作

(3)、第乙個數需要立即輸出

方法一:setinterval和clearinterval,setinterval方法主要是呼叫函式執行

function count(start, end) ,100);

return

}}方法二:settimeout和cleartimeout,settimeout方法主要是採用遞迴的方式執行

function count(start, end) ,100);

}return

}}

4、實現 fizzbuzz 函式,引數 num 與返回值的關係如下:

(1)如果 num 能同時被 3 和 5 整除,返回字串 fizzbuzz

(2)如果 num 能被 3 整除,返回字串 fizz

(3)如果 num 能被 5 整除,返回字串 buzz

(4)如果引數為空或者不是 number 型別,返回 false

(5)其餘情況,返回引數 num

function fizzbuzz(num) else if(num%5==0) return 'buzz';

else if(num%3==0) return 'fizz';

return num;

}

5、將陣列 arr 中的元素作為呼叫函式 fn 的引數。

輸入:function (greeting, name, punctuation) , ['hello', 'ellie', '!']

輸出:hello, ellie!

//函式名.call(上下文,各引數)

function argsasarray(fn, arr)

6、將函式 fn 的執行上下文改為 obj 物件

輸入:function () ,

輸出:hello, rebecca!!!

//方法一:利用bind繫結函式的上下文,再呼叫函式

function speak(fn, obj)

//方法二:call第乙個引數為函式的上下文,對第乙個引數進行賦值即可

function speak(fn, obj)

function speak(fn, obj)

7、實現函式 functionfunction,呼叫之後滿足如下條件:

(1)返回值為乙個函式 f

(2)呼叫返回的函式 f,返回值為按照呼叫順序的引數拼接,拼接字元為英文逗號加乙個空格,即 ', '

(3)所有函式的引數數量為 1,且均為 string 型別

輸入:functionfunction('hello')('world')

輸出:hello, world

//此函式僅限案例中輸入輸出的格式,函式名(引數一)(引數二)

function functionfunction(str)

}

8、實現函式 makeclosures,呼叫之後滿足如下條件:

(1)返回乙個函式陣列 result,長度與 arr 相同

(2)執行 result 中第 i 個函式,即 result[i](),結果與 fn(arr[i]) 相同

輸入:[1, 2, 3], function (x)

輸出:4

//此題主要考察的是陣列內如何存放函式,將函式壓入到陣列內,直接將陣列返回即可。

function makeclosures(arr, fn) )

})return newarray;

}

9、已知函式 fn 執行需要 3 個引數。請實現函式 partial,呼叫之後滿足如下條件:

(1)返回乙個函式 result,該函式接受乙個引數

(2)執行 result(str3) ,返回的結果與 fn(str1, str2, str3) 一致

輸入:var sayit = function(greeting, name, punctuation) ;  partial(sayit, 'hello', 'ellie')('!!!');

輸出:hello, ellie!!!

//此題主要是partial對fn的乙個二次封裝函式

function partial(fn, str1, str2)

return result;

}

10、函式 usearguments 可以接收 1 個及以上的引數。請實現函式 usearguments,返回所有呼叫引數相加後的結果。本題的測試引數全部為 number 型別,不需考慮引數轉換。

輸入:1, 2, 3, 4

輸出:10

//此題的重點是利用函式的arguments,獲取此函式傳遞的引數

function usearguments()

12、實現函式 partialusingarguments,呼叫之後滿足如下條件:

(1)返回乙個函式 result

(2)呼叫 result 之後,返回的結果與呼叫函式 fn 的結果一致

(3)fn 的呼叫引數為 partialusingarguments 的第乙個引數之後的全部引數以及 result 的呼叫引數

//利用arguments獲取呼叫函式時傳遞的引數,此處需要注意,arguments在哪個函式內部,便獲取該函式呼叫時引數

function partialusingarguments(fn)

return result;

}

13、已知 fn 為乙個預定義函式,實現函式 curryit,呼叫之後滿足如下條件:

(1)返回乙個函式 a,a 的 length 屬性值為 1(即顯式宣告 a 接收乙個引數)

(2)呼叫 a 之後,返回乙個函式 b, b 的 length 屬性值為 1

(3)呼叫 b 之後,返回乙個函式 c, c 的 length 屬性值為 1

(4)呼叫 c 之後,返回的結果與呼叫 fn 的返回值一致

(5)fn 的引數依次為函式 a, b, c 的呼叫引數

輸入:var fn = function (a, b, c) ; curryit(fn)(1)(2)(3);

輸出:6

//方法一:利用區域性遞迴的方式執行內部函式,直至函式內部return

function curryit(fn)

return result;

}//方法二:利用函式簽到函式的方式進行,此方法僅限三個括號即函式名(fn)(引數一)(引數二)(引數三)

function curryit(fn) }}

}

結束語:

JS能力測評經典題之Number型別

獲取數字 num 二進位制形式第 bit 位的值。注意 1 bit 從 1 開始 2 返回 0 或 1 3 舉例 2 的二進位制為 10,第 1 位為 0,第 2 位為 1 輸入例子 valueatbit 128,8 輸出例子 1function valueatbit num,bit 注意 num....

JS能力測評45 判斷是否符合 USD 格式

思路 本題注意點有必須是usd格式,以 開頭,數字結尾,和小數點的轉義。首先,開頭必是 而正規表示式中 表示結尾,需要進行轉義,因此開頭為 然後 後必然接數字,並且最少一位,最多三位數,可用表示,最少m位,最多n位,因此此段為 d 接著,後面如還有數,則必然有,分隔,並且後面必有3個數,類似於,的格...

經典JS閉包題

在逛部落格時,看見乙個很有意思的閉包題,發現自己對閉包沒有完全理解,故記錄下來。先看題目 function fun n,o var a fun 0 a.fun 1 a.fun 2 a.fun 3 undefined,var b fun 0 fun 1 fun 2 fun 3 undefined,va...