インタビューの質問
1つ、
コードコピーは次のとおりです。
そのような関数を定義してください
関数の繰り返し(func、times、wait){
}
この関数は、たとえば新しい関数を返すことができます
var RepeatedFun = Repeat(Alert、10、5000)
このrepeatedFun( "Hellworld")を呼び出す
Helloworldに10回警告します。各時間間隔は5秒です
二、
コードコピーは次のとおりです。
必要な関数StringConcatを書きます
var result1 = stringconcat( "a"、 "b")result1 = "a+b"
var stringconcatwithprefix = stringconcat.prefix( "hellworld");
var result2 = stringconcatwithprefix( "a"、 "b")result2 = "hellworld+a+b"
サイドディッシュソリューション
これらの2つの質問は閉鎖をテストします。あまりナンセンスを言わずに、コードを入力するだけです。
コードコピーは次のとおりです。
/**
*質問1
* @param func
* @Param Times
* @param待ってください
* @returns {repeatimpl}
*/
関数の繰り返し(func、times、wait){
//デバッグを容易にするために匿名関数は使用されていません
関数repeatimpl(){
varハンドル、
_Arguments =引数、
i = 0;
handle = setInterval(function(){
i = i + 1;
//指定された回数の場合はタイマーをキャンセルします
if(i === times){
ClearInterval(ハンドル);
戻る;
}
func.apply(null、_arguments);
}、待って);
}
RepeatImplを返します。
}
//テストケース
var Repeatfun = Repeat(Alert、4、3000);
Repeatfun( "Hellworld");
/**
*質問2
* @returns {string}
*/
関数StringConcat(){
var result = [];
stringconcat.merge.call(null、result、arguments);
return result.join( "+");
}
stringconcat.prefix = function(){
var _arguments = []、
_this = this;
_this.merge.call(null、_arguments、arguments);
return function(){
var _args = _arguments.slice(0);
_this.merge.call(null、_args、arguments);
return _this.apply(null、_args);
};
};
stringconcat.merge = function(array、arraylike){
var i = 0;
for(i = 0; i <arraylike.length; i ++){
array.push(arraylike [i]);
}
}
//テストケース
var result1 = stringconcat( "a"、 "b"); // result1 = "a+b"
var result3 = stringconcat( "c"、 "d"); // result1 = "a+b"
var stringconcatwithprefix = stringconcat.prefix( "hellworld");
var stringconcatwithprefix1 = stringconcat.prefix( "hellworld1");
var result2 = stringconcatwithprefix( "a"、 "b"); // result2 = "hellworld+a+b"
var result4 = stringconcatwithprefix1( "c"、 "d"); // result2 = "hellworld+a+b"
アラート(result1);
アラート(result2);
アラート(result3);
アラート(結果4);