window.val = 1;
var obj = {
val: 2,
dbl: function () {
this.val *= 2;
val *= 2;
console.log(val);
console.log(this.val);
}
};
// 说出下面的输出结果
obj.dbl();
var func = obj.dbl;
func();
结果是: 2 4 8 8

val变量在没有指定对象前缀,默认从函数中找,找不到则从window中找全局变量

即 val *=2 就是 window.val *= 2

this.val默认指的是 obj.val ;因为 dbl()第一次被obj直接调用

<2>14行代码调用

func() 没有任何前缀,类似于全局函数,即 window.func调用,所以

第二次调用的时候, this指的是window, val指的是window.val

第二次的结果受第一次的影响

var obj = {
say: function () {
return function() {
console.log(this)
}
}
}
obj.say()(); // window

var obj = {
say: function () {
return ()=> {
console.log(this)
}
}
}
obj.say()(); // obj

匿名函数由于没有默认的宿主对象,所以默认this指向window  箭头函数改善

<script>
var obj = {
say: function () {
setTimeout(() => {
console.log(this)
});
}
}
obj.say(); // obj
</script>
此时的 this继承自obj, 指的是定义它的对象obj, 而不是 window!

定时器中的函数,由于没有默认的宿主对象,所以默认this指向window

但是使用箭头函数可以改善

最新文章

  1. [LeetCode] Binary Tree Inorder Traversal 二叉树的中序遍历
  2. Ubuntu小点汇总,更新中...
  3. 7、JavaScript总结——实现选项卡切换的效果
  4. 验证(Verification)与确认(Validation)的差别
  5. JS学习笔记(一)基本数据类型和对象类型
  6. asp.net ajax 检测用户名是否可用代码
  7. redis删除所有key
  8. echart折线图系列一:折线图基本配置
  9. spark-rpc是如何实现将netty的Channel隐藏在inbox中的
  10. Exp 8 Web基础
  11. react-native 搭建环境
  12. Java学习笔记之异常处理
  13. Java多线程超详细总结
  14. wordpress 常用函数-wpdb类
  15. c #include &quot;&quot; 和 &lt;&gt;
  16. 归纳整理Linux下C语言常用的库函数----字符串转换、字符测试、及内存控制
  17. Python3 hex() 函数
  18. Java程序设计11——异常处理
  19. 【springmvc+mybatis项目实战】杰信商贸-5.生产厂家DAO+SERVICE+CONTROLLER+JSP+配置文件
  20. Linux 查看CPU、Memory等资源占用情况

热门文章

  1. python-处理json、处理时间
  2. java核心-JVM-gc面试题
  3. 第二阶段scrum-4
  4. flink初识及安装flink standalone集群
  5. Spark 资源调度 与 任务调度
  6. Day 17:缓冲输出字符流和用缓冲输入输出实现登录、装饰者设计模式
  7. check Linux文件夹个数
  8. POJ 3994:Probability One
  9. 个人微信开发API协议(转)
  10. SpringBoot之Order注解启动顺序