面试题----this的用法

说起“this”很多小伙伴们都很头疼,虽然臭臭也理解的不是很深,看到这样的面试题还是不由自主的想要分享一下哟~

var out = 25,
   inner = {
      out: 20,
      func: function () {
         var out = 30;
         return this.out;
      }
   };

 inner.func();//20
 (inner.func = inner.func)();//25
       

小伙伴们先看第一个   inner.func()  的执行,func函数是在inner对象下的方法,所以在func中的 “this”固然是指向了inner,在inner中找到out为20,所以返回为20;顺便问大家一个小问题,如果inner下面没有out属性的话会返回什么呢?

接下来我们来看第二个的结果,首先“=”为赋值,将右边的值赋给左边,右边是一个函数function(){var out = 30; return this.out};左边相当于是一个变量,有的小伙伴可能会说没有声明呀,在这里说一下,var ,let,const都可以声明变量,当没有声明时就默认为全局变量window下的对象,例如:a = 1等;好了我们回到题中,赋值完成之后代码就如下啦:

(inner.func = function(){
    var out = 30;
    return this.out;
})();

这个样子调用的时候是在window下的执行,此时的this指向window,结果也为window下的out,为25啦~

第二题:

function a(){
  alert(this);
}
a.call(null);
A.[object window] B.[object object]

小伙伴都知道call(),apply()都会改变this指向,有两个参数第一个参数就是this指向的对象。在这里参数为null,很多小小伙伴可能觉得this直接指向null了;还有一些小伙伴思考的深入一点认为null为基本数据类型为object对象,所以指向object;其实,在js中.call()与.apply()方法,当传入的味null、undefined时会解读为全局对象,所以this在这里指向的是window。

不知道这样的解释小伙伴们会不会理解,有不对的地方敬请指出哦~~~

你可能感兴趣的:(面试题集锦)