首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Javascript ING BANK 3试题面试

Javascript ING BANK 3试题面试
EN

Stack Overflow用户
提问于 2016-10-11 09:09:44
回答 4查看 211关注 0票数 0

我进行了一次测试面试,有三个问题我不知道答案:

  1. 编写一个函数,在字符之间插入下划线:这将成为t_h_i_s。
  2. 编写一个输出如下内容的函数:

代码语言:javascript
运行
复制
l('t') === 'lt'
l()('t') === 'l3t'
l()()('t') === 'l33t'
l()()('g') === 'l33g'
l()()()()()()()()()()()('t') === 'l33333333333t'

  1. 为什么输出是真的?

代码语言:javascript
运行
复制
var bar = true;
function foo() {
  bar = false;
  return 5;
  function bar() {}
}
foo();
console.log(bar);

有人能帮我解答一下答案吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-10-11 09:41:19

  1. 编写一个函数,在字符之间插入下划线:这将成为t_h_i_s。

您希望编写一个函数来迭代字符串中的所有字符,并在所有字符之间添加下划线。

例如:

代码语言:javascript
运行
复制
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') );

  1. 编写一个输出如下内容的函数:

您将需要编写一个返回另一个函数的函数,这样您就可以链接这些函数。因为Javascript允许将函数存储为变量,所以可以通过不断地调用相同的函数来使用它,直到返回适当的参数为止。

下面的函数就是一个例子。它按预期工作,但并不是最漂亮的。

代码语言: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' );

  1. 为什么输出是真的?
代码语言:javascript
运行
复制
var bar = true;
function foo() {
  bar = false;
  return 5;
  function bar() {}
}
foo();
console.log(bar);

函数bar中的foo()没有引用全局变量bar。相反,它引用的是函数function bar() {}。正如注释中提到的,这是因为吊装

因此,全局bar变量完全不受函数的影响,并且在任何时候都保持为真。

票数 3
EN

Stack Overflow用户

发布于 2016-10-11 09:54:21

这实际上取决于预期的代码级别。如果您需要演示对算法的理解或如何使用javascript构造的知识。

例如,第一个问题可以很简单,如:

代码语言:javascript
运行
复制
function insertUnderscore(x){
    return x.split('').join('_');
}

第二个问题递归方法:

代码语言:javascript
运行
复制
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’上的行为。

票数 2
EN

Stack Overflow用户

发布于 2016-10-11 09:23:19

如果字母未定义,则只返回迭代器函数,当定义字母时,它会重复字符'3‘n次。

另外两个应该很容易搞清楚

代码语言:javascript
运行
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39973915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档