阿里巴巴js面试题3

来源:互联网 发布:sqlserver编写事务 编辑:程序博客网 时间:2024/05/20 17:59

转自http://blog.csdn.net/qq_27682041/article/details/76779986

该题难度系数: ★★★

考查的技术点: 1). this  2). 闭包

题目如下:

[javascript] view plain copy
  1. var name = "A"  
  2. var object = {  
  3.   name: "B",  
  4.   getNameFunc: function () {  
  5.     return function () {  
  6.       return this.name    
  7.     }  
  8.   }  
  9. }  
  10. console.log(object.getNameFunc()())    
  11.   
  12.   
  13. var name2 = "A"  
  14. var object2 = {  
  15.   name2: "B",  
  16.   getNameFunc: function () {  
  17.     var that = this    
  18.     return function () {  
  19.       return that.name2  
  20.     }  
  21.   }  
  22. }  
  23. console.log(object2.getNameFunc()())   


运行结果:



接下来我们分析一下:

第一道题:object.getNameFunc()里面有一个闭包,返回的是一个函数,然后加个()就表示函数的调用了。而此时是默认的执行方式,this代表window,那么name就是全局变量‘A’;

第二道题:注意到,里面先对this进行缓存起来,this代表object,当object.getNameFunc()返回一个函数时,调用就返回的是一个object的name2属性值'B'。