Javascript ING BANK面试3题测试
Javascript ING BANK 3 questions test interview
我参加了一次考试面试,有3道问题我不知道答案:
-
编写一个函数,将在字符之间插入下划线:这将成为t_h_i_s。
-
写一个函数输出如下:
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);
有人能帮我解答一下吗?
- 写一个函数,将在字符之间插入下划线:这将成为t_h_i_s。
您想编写一个函数,遍历字符串中的所有字符,并在所有字符之间添加下划线。
例如: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);
函数foo()
中的bar
没有引用全局变量bar
。相反,它引用了函数function bar() {}
。这是因为在评论中提到的提升。
因此,全局变量bar
根本不会被函数触及,并且始终保持为真。
这实际上取决于预期的代码级别。如果你需要展示对算法的理解或如何使用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'。
如果该字母未定义,则返回迭代器函数,当该字母已定义时,则重复字符'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')
问题1
对字符串的开头使用负向前看,对字符使用正向前看。将给定的空字符串替换为下划线
function spacer(s) {
return s.replace(/(?!^.)(?=.)/g, '_');
}
console.log(spacer('this'));
问题2
使用闭包并返回函数的非给定形参,否则为扩展值。
function l(v) {
var s = 'l';
fn = function (v) {
s += 3;
return v === undefined ? fn : s + v;
};
return v === undefined ? fn : s + v;
}
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');
问题3
因为function bar() {}
被提升到函数的开头,然后被false
覆盖。外部的bar
变量从未改变过它的内容。
var bar = true;
function foo() {
bar = false;
console.log('foo''s bar:', bar);
return 5;
function bar() {}
}
foo();
console.log(bar);
相关文章:
- 模糊事件的Javascript测试
- 我的单元测试选项是什么
- 测试索引值是否等于某个数字的倍数
- 在localhost Dev Box上测试JSONP请求的最佳方式
- 测试数组中每个项的内容
- 测试Angular Service解决错误回调中的promise
- 使用Jest测试React Native应用程序
- 为函数代码编写测试
- 如何在Angular单元测试中从另一个控制器的rootScope将方法添加到rootScope中
- 如何使用JS/nightwatchjs并行运行多个测试
- 使用量角器的当前url单元测试的getTitle
- 茉莉花宝石-耙茉莉花:ci dons't运行测试
- JavaScript滚动脚本-在测试中激发,而不是在开发站点上
- AngularJS指令单元测试中未定义的函数
- 一个密码测试程序,如果存在空格,它会提醒用户
- 测试角度解析方法
- Protractor:在Iframe中测试非角度应用程序
- 简单类测试未通过
- 如何在Ionic2测试版中包含Ionic.io服务
- Javascript ING BANK面试3题测试