javascript 面试题收集

来源:互联网 发布:剑三重置版优化补丁 编辑:程序博客网 时间:2024/06/06 02:30

- this对象的理解

  this总是指向函数的直接调用者

  如果有new的话,指向new出来的对象

  在事件中,this指向触发这个事件的对象


- new操作符都干了什么?

  创建一个空对象,并且this变量引用该对象,同时继承该对象的原型。

  属性和方法加入到this引用的对象中

  新创建的对象由this引用,并且最后隐式返回this。


- call() , apply(), bind() 区别


- object.prototype 理解

 定义一个spcify()函数

  spacify('hello world')   => 输出  ‘h e l l o  w o r l d’

 进一步实现

 ‘hello world’.spaciy()

  String.prototype.spacify = function(){

  return this.prototype.split().join(' ')

  }


- 函数声明 和函数表达式的区别

  对于函数声明,js解析器会优先读取,确保在所有代码执行之前声明已经被解析,而函数表达式,如同定义其它基本类型的变量一样,只在执行到某一句时也会对其进行解析,所以在实际中,它们还是会有差异的,具体表现在,当使用函数声明的形式来定义函数时,可将调用语句写在函数声明之前,而后者,这样做的话会报错。


- 参数arguments理解

 定义个log函数,添加(app)的前缀


- context 上下文

下一组问题是考察侯选人对上下文和this的理解。我先定义了下面一个例子。注意count属性不是只读取当前下下文的。

var User = {  count: 1,  getCount: function() {    return this.count;  }};

我又写了下面几行,然后问侯选人log输出的会是什么。

    console.log(User.getCount());    var func = User.getCount;    console.log(func());

这种情况下,正确的答案是1和undefined。你会很吃惊,因为有很多人被这种最基础的上下文问题绊倒。func是在winodw的上下文中被执行的,所以会访问不到count属性。我向侯选人解释了这点,然后问他们怎么样保证User总是能访问到func的上下文,即返回正即的值:1

正确的答案是使用Function.prototype.bind,例如:

    var func = User.getCount.bind(User);    console.log(func());

接下来我通常会说这个方法对老版本的浏览器不起作用,然后让侯选人去解决这个问题。很多弱一些的侯选人在这个问题上犯难了,但是对于你来说雇佣一个理解apply和call的侯选人非常重要。

    Function.prototype.bind = Function.prototype.bind || function(context){      var self = this;      return function(){        return self.apply(context, arguments);      };    }






0 0
原创粉丝点击