면접질문
1.
그런 기능을 정의해주세요
기능 반복(func, times, wait) {
}
이 함수는 새 함수를 반환할 수 있습니다. 예를 들어 다음과 같이
를 사용하세요.
var RepeatFun = 반복(경고, 10, 5000)
이것을 RepeatFun("hellworld")이라고 부르세요
helloworld에 매번 5초 간격으로 10번 경고합니다
2.
이 필요한 함수 stringconcat를 작성하세요.
var result1 = stringconcat("a", "b") result1 = "a b"
var stringconcatWithPrefix = stringconcat.prefix("hellworld");
var result2 = stringconcatWithPrefix("a", "b") result2 = "hellworld a b"
스낵 솔루션
이 두 가지 질문은 모두 클로저에 관한 것입니다. 더 이상 고민하지 말고 바로 코드로 넘어가겠습니다.
/**
*첫 번째 질문
* @param func
* @param 시간
* @param 잠깐
* @returns {repeatImpl}
*/
기능 반복(func, times, wait) {
//디버깅을 용이하게 하기 위해 익명 함수를 사용하지 않습니다
함수 반복Impl(){
var 핸들,
_arguments = 인수,
i = 0;
핸들 = setInterval(function(){
i = i 1;
//지정된 횟수에 도달하면 타이머를 취소합니다
if(i === 회){
Clearinterval(핸들)
반품;
}
func.apply(null, _arguments);
},잠깐);
}
반복Impl;
반환
}
//테스트케이스
var RepeatFun = 반복(경고, 4, 3000);
RepeatFun("지옥세계");
/**
*두 번째 질문
* @returns {문자열}
*/
함수 stringconcat(){
var 결과 = [];
Stringconcat.merge.call(null, 결과, 인수);
결과 반환.join(" ");
}
stringconcat.prefix = 함수(){
var _arguments = [],
_this = this;
_this.merge.call(null, _arguments, 인수);
반환함수(){
var _args = _arguments.slice(0);
_this.merge.call(null, _args, 인수);
return _this.apply(null, _args);
};
};
stringconcat.merge = 함수(배열, 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"
경고(결과1);
경고(결과2);
경고(결과3);
경고(결과4);