Interview questions
1.
Please define such a function
function repeat (func, times, wait) {
}
This function can return a new function, for example, use
like this
var repeatedFun = repeat(alert, 10, 5000)
Call this repeatedFun ("hellworld")
Will alert helloworld ten times, with an interval of 5 seconds each time
2.
Write a function stringconcat, which requires
var result1 = stringconcat("a", "b") result1 = "a b"
var stringconcatWithPrefix = stringconcat.prefix("hellworld");
var result2 = stringconcatWithPrefix("a", "b") result2 = "hellworld a b"
Snack solution
These two questions are all about closures. Without further ado, let’s go straight to the code.
/**
*The first question
* @param func
* @param times
* @param wait
* @returns {repeatImpl}
*/
function repeat (func, times, wait) {
//Anonymous functions are not used to facilitate debugging
Function repeatImpl(){
var handle,
_arguments = arguments,
i = 0;
handle = setInterval(function(){
i = i 1;
//Cancel the timer when the specified number of times is reached
if(i === times){
Clearinterval (handle);
return;
}
func.apply(null, _arguments);
},wait);
}
Return repeatImpl;
}
//Test case
var repeatFun = repeat(alert, 4, 3000);
repeatFun("hellworld");
/**
*The second question
* @returns {string}
*/
function 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]);
}
}
//Test case
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"
alert(result1);
alert(result2);
alert(result3);
alert(result4);
Statement:The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn