面试题解析

window.number = 1;
var obj = {
number: 4,
dbl: (function(){
console.log(obj.number);
this.number *= 2;
console.log(obj.number);
return function () {
this.number *= 2;
}
})()
}
var dbl = obj.dbl;
dbl();
obj.dbl();
console.log(window.number);
console.log(obj.number);

关键是this的指向问题,在 this 有所属对象时就指向所属对象,没有所属对象就指向全局对象。

全体代码有两个作用域

  • 全局作用域 number 、 obj

  • 局部作用域 obj.nujber 、 obj.dbl

      var dbl = obj.dbl;
  • obj.dbl 为立即执行函数

  • window.number = 1 * 2 = 2

  • 执行结果为一个匿名函数

  • function () { this.number *= 2; }

      dbl();
  • this ==> window

  • window.number = 2 * 2 = 4

      obj.dbl();
  • this ==> obj

  • obj.number = 4 * 2 = 8

      console.log(window.number);
  • 执行结果为 window.number = 4

      console.log(obj.number);
  • 执行结果为 obj.number = 8

所以结果为 4,8

最新文章

  1. 样条函数 -- spline function
  2. git vs svn
  3. 11、创建不使用XAML的WPF应用程序
  4. PuTTY DSA签名远程缓冲区溢出漏洞(CVE-2013-4207)
  5. Android Studio中关于Project与Module
  6. java课程设计——博客作业教学数据分析系统(201521123083 戴志斌)
  7. Linux用户管理的复习时间
  8. C++——带默认参数值的函数
  9. 4.Apache POI使用详解
  10. TopCoder SRM 561 Div 1 - Problem 1000 Orienteering
  11. 设置TextView显示的文字可以复制
  12. 网络编程之套接字(tcp)
  13. php判断语句
  14. js判断假值
  15. 在 Linux 平台中调试 C/C++ 内存泄漏方法(转)
  16. Xcode文件被锁定:The file ".xcodeproj" could not be unlocked
  17. 场景服务只创建了 Service Difinition 和feature layer
  18. activity+fragment+listview+adapter+bean在同一个类中的套路
  19. Go正则处理
  20. 图解缓存淘汰算法一之LRU

热门文章

  1. javascript飞机大战-----005创建子弹对象2
  2. SaltStack配置管理-jinja模板
  3. PHP的线性安全和非线性安全的区别
  4. 0702-spring cloud config-git仓库配置、用户授权
  5. LockSupport HotSpot里park/unpark的实现
  6. spring boot 重定向
  7. Ajax保留浏览器历史的两种解决方案(Hash&Pjax)
  8. Excel error 64-bit version of SSIS
  9. Java backup
  10. ng-深度学习-课程笔记-17: 序列模型和注意力机制(Week3)