javascript经典面试题目

问题1: 作用域


code:

  1. (function() {
  2.    var a = b = 5;
  3. })();

  4. console.log(b);

结果会输出什么? 
答案: 5
这个问题考查的要点是两个不同的作用域,'a'被var声明成了一个局部变量,但是'b'实际上没有被定义,所以它是一个全局变量。
这个问题还牵扯到另个一个比较重要的问题,就是strict mode,如果你选择了strict mode,上面的代码就会报Uncaught ReferenceError,因为b没有被定义,它可以帮你检查出代码的一些问题:
  1. (function() {
  2.    'use strict';
  3.    var a = window.b = 5;
  4. })();

  5. console.log(b);

问题2: 创建“native”方法
写一个重复打印字符串对象的方法,输入一个整数,这个整数代表重复打印的字数,比如:
  1. console.log('hello'.repeatify(3));

这样会打印出hellohellohello。
答案:
其中一种实现方法是这样: 
  1. String.prototype.repeatify = String.prototype.repeatify || function(times) {
  2.    var str = '';

  3.    for (var i = 0; i < times; i++) {
  4.       str += this;
  5.    }

  6.    return str;
  7. };


这个问题考查的是开发者对JavaScript继承和prototype属性的了解程度。
Question 3: Hoisting

下面这段代码的输出结果是什么?
  1. function test() {
  2.    console.log(a);
  3.    console.log(foo());
  4.     
  5.    var a = 1;
  6.    function foo() {
  7.       return 2;
  8.    }
  9. }
  1. test();
答案
undefined和2。
上面的代码和下面这段是等效的:
  1. function test() {
  2.    var a;
  3.    function foo() {
  4.       return 2;
  5.    }

  6.    console.log(a);
  7.    console.log(foo());
  8.     
  9.    a = 1;
  10. }

  11. test();
问题4: 在JavaScript中如何执行
通过下面的代码给出结果,解释一下你的答案:
  1. var fullname = 'John Doe';
  2. var obj = {
  3.    fullname: 'Colin Ihrig',
  4.    prop: {
  5.       fullname: 'Aurelio De Rosa',
  6.       getFullname: function() {
  7.          return this.fullname;
  8.       }
  9.    }
  10. };

  11. console.log(obj.prop.getFullname());

  12. var test = obj.prop.getFullname;

  13. console.log(test());
答案:
Aurelio De Rosa 和John Doe。
问题5: call() 和 apply()

解决前面的问题之后让最后一个console.log()输出Aurelio De Rosa.
答案:
这个问题在于call()还是apply()。 如果你不知道它们之间的区别,我建设你先读一读 What’s the difference between function.call and function.apply? 下面这行代码我使用了call(),但是这个情况下apply()也会产生同样的结果:

  1. console.log(test.call(obj.prop));


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值