几道有关于this的面试题

var age= 10;
var foo = {
          
   
   x : 20,
   bar : function(){
          
   
       var age = 30;
       console.log(this.age)
     
   }
};
foo.bar();//20
(foo.bar)();//10
(foo.bar = foo.bar)();//10
(foo.bar,foo.bar)();//

第一道题 我们都很清楚答案。就是谁调用该函数的,this就是指向该调用的对象 第二道题的话,可能不好理解,其实跟第三道题是一样的,都是关于ES5的规范,语句块,语句,甚至是表达式都会隐式地返回一个结果值。 总结如下:结果值是语句、表达式经过逻辑运算后的值,若无逻辑(按顺序执行)则为最后一条的子语句、表达式的值(语句包含子语句),简单的说他就是一个语句、表达式的“隐式的返回值”。JavaScript会计算每一条语句,表达式会返回一个结果值,而对于语句块的结果值,他是最后一提哦啊最外层语句的结果值 详情可以点击

所以第二题可以变换成这样

var age= 10;
var foo = {
          
   
   x : 20,
   bar : function(){
          
   
       var age = 30;
       console.log(this.age)
     
   }
};
var  a = foo.bar
(a)();
var fn = (foo.bar = foo,bar)
(foo.bar = foo.bar)();

所以我们可以看到两个返回的都是引用。并且上下文是在全局是在,所以返回的都是 10,但是在严格模式下是undefined

注意的是:

至于第四题的话也是跟ES5的规范有关,因为在多个语句中是会执行最后的一条子语句,然后他会返回值,作为整个函数的调用。

经验分享 程序员 微信小程序 职场和发展