我进行了一次测试面试,有三个问题我不知道答案:
l('t') === 'lt'
l()('t') === 'l3t'
l()()('t') === 'l33t'
l()()('g') === 'l33g'
l()()()()()()()()()()()('t') === 'l33333333333t'
var bar = true;
function foo() {
bar = false;
return 5;
function bar() {}
}
foo();
console.log(bar);
有人能帮我解答一下答案吗?
发布于 2016-10-11 09:41:19
您希望编写一个函数来迭代字符串中的所有字符,并在所有字符之间添加下划线。
例如:
function underscoreString(str) {
var result = str.charAt(0);
for (var i=1; i<str.length; i++) {
result += '_' + str.charAt(i);
}
return result;
}
console.log( underscoreString('this') );您将需要编写一个返回另一个函数的函数,这样您就可以链接这些函数。因为Javascript允许将函数存储为变量,所以可以通过不断地调用相同的函数来使用它,直到返回适当的参数为止。
下面的函数就是一个例子。它按预期工作,但并不是最漂亮的。
function l(ch) {
var str = 'l';
if (ch) return str + ch;
else str += '3';
var newFunc = function (ch) {
if (ch) return str + ch;
str += '3';
return newFunc;
}
return newFunc
}
console.log( l('t') === 'lt' );
console.log( l()('t') === 'l3t' );
console.log( l()()('t') === 'l33t' );
console.log( l()()('g') === 'l33g' );
console.log( l()()()()()()()()()()()('t') === 'l33333333333t' );var bar = true;
function foo() {
bar = false;
return 5;
function bar() {}
}
foo();
console.log(bar);函数bar中的foo()没有引用全局变量bar。相反,它引用的是函数function bar() {}。正如注释中提到的,这是因为吊装。
因此,全局bar变量完全不受函数的影响,并且在任何时候都保持为真。
发布于 2016-10-11 09:54:21
这实际上取决于预期的代码级别。如果您需要演示对算法的理解或如何使用javascript构造的知识。
例如,第一个问题可以很简单,如:
function insertUnderscore(x){
return x.split('').join('_');
}第二个问题递归方法:
function l( end ){
var acc = '';
function iter( eChar ){
if( typeof eChar === "undefined"){
acc=acc+'3';
return iter;
}
return 'l'+acc+eChar;
}
if(typeof end === "undefined"){
acc = acc + '3';
return iter;
}
return iter(end);
}第三个问题:函数bar(){}实际上在本地范围内声明了' bar‘,所以您的赋值bar= false在本地'bar’上的行为。
发布于 2016-10-11 09:23:19
如果字母未定义,则只返回迭代器函数,当定义字母时,它会重复字符'3‘n次。
另外两个应该很容易搞清楚
function l(letter) {
let count = 0
function iter(letter) {
if (typeof letter === 'undefined') {
count++
return iter
} else {
return 'l' + ('3'.repeat(count)) + letter
}
}
return iter(letter)
}
console.log(l('t') === 'lt')
console.log(l()('t') === 'l3t')
console.log(l()()('t') === 'l33t')
console.log(l()()('g') === 'l33g')
console.log(l()()()()()()()()()()()('t') === 'l33333333333t')
https://stackoverflow.com/questions/39973915
复制相似问题