this全面解析

笔记:

this的运行机制:

(1) this是在运行时绑定的,并不是在编写时绑定,它的上下文取决于函数调用时的各种条件。this的绑定和函数声明的位置没有任何关系,只取决于函数的调用方式。
(2) 当一个函数被调用时,会创建一个活动记录(有时候也被称作执行上下文)。这个记录会包含函数在哪里调用(调用栈)、函数的调用方式、传入的参数等信息。this就是记录这个属性,它会在函数执行时候被用到。

查看函数this的方法:

this的绑定就是通过函数的直接调用位置,所以分析函数的直接调用位置,就可以分析出每个执行函数的this。可以把调用栈想象成一个函数的作用链,通过这个作用链可以清晰的看到每个函数的直接调用位置。

代码示例:

function baz(){//当前调用栈是:baz//因此调用位置是全局作用域,this指向windowconsole.log('baz')bar() // <- bar的调用位置
}function bar(){//当前调用栈是:baz -> bar//因此调用位置是baz中,this指向bazconsole.log('bar')foo() // <- foo的调用位置
}function foo(){//当前调用栈是:baz -> bar -> foo//因此调用位置是bar中,this指向barconsole.log('foo')
}baz() //<- baz的调用位置

找到函数的调用位置以后就可以通过以下四条规则来判断this的绑定对象:

(1)由new调用的话,this绑定到新创建的对象上
(2)由call、apply或者bind调用的话,this绑定在指定的对象上
(3)由上下文调用的话,this绑定到那个上下文对象
(4)默认情况,在严格模式下绑定在undefined,否则绑定到全局对象

new 在执行时会做四件事情:

(1)在内存中创建一个空对象
(2)让this指向这个对象
(3)执行构造函数里面的代码,给这个新对象添加属性和方法
(4)返回这个新对象(所以构造函数里面不需要return)

注意:箭头函数不会遵循四条标准的绑定规则,它不会创建自己的this上下文,会继承定义时外层函数的this绑定(无论this绑定到什么),并且不会被改变。

你不知道的javaScript读书笔记(六)相关推荐

  1. 你不知道的javascript读书笔记3

    概述 这是我看<你不知道的JavaScript(中卷)>中关于类型检查的笔记,供以后开发时参考,相信对其他人也有用. typeof 我们知道js中有七种内置类型:undefined, nu ...

  2. 你不知道的javascript读书笔记

    这本书真的挺不错的,感觉以前很多不敢碰,很迷茫的问题都解决好多,看到模块化记录一下自己的理解 下面是代码: var MyModules = (function Manager() { var modu ...

  3. 3d游戏设计读书笔记六

    3d游戏设计读书笔记六 一.改进飞碟(Hit UFO)游戏: 游戏内容要求: 按 adapter模式 设计图修改飞碟游戏 使它同时支持物理运动与运动学(变换)运动 更改原 UFO_action 类 为 ...

  4. Javascript读书笔记(六)函数作用域,声明提前,作用域链,闭包

    参照内容来自<JavaScript权威指南>,<JavaScript高级程序设计> 函数作用域 类似C语言的编程语言中有块级作用域,JavaScript中没有块级作用域,取而代 ...

  5. 高性能JavaScript 读书笔记

    第一章:加载和执行 浏览器的JavaScript的引擎是编译器层的优化: 当浏览器执行JavaScript代码时,不能同时做其他任何事情(单一进程),意味着<script>标签每次出现都霸 ...

  6. Android驱动开发读书笔记六

    第六章 Linux 驱动的工作和访问方式是 Linux 的亮点之一,Linux 系统将每一个驱动都映射成一个文件.这些文件称为设备文件或驱动文件,都保存在/dev目录中,由于大多数Linux驱动都有与 ...

  7. C专家编程--读书笔记六 运行时数据结构

    第六章 一.知识点 1.代码和数据的区别也可以认为是编译时和运行时的分界线.编译器的绝大部分工作都跟翻译代码有关:必要的数据存储管理的绝大部分都在运行时进行.(P121) 2."a.out& ...

  8. 《七步掌握业务分析》读书笔记六

    分析技术和呈现格式 词汇表 强有力沟通的一个重要内容是一致地使用术语和惯用语.每次谈话都涉及对术语的共同理解. 工作流图(也称为流程图.UNL活动图和过程图) 工作流程把一个或多个业务过程的细节可视化 ...

  9. 高性能javascript读书笔记(三.DOM 编程2)

    重绘和重排版 浏览器下载完所有的HTML标记,Javascript,CSS,图片之后,它解析文件并创建两个内部数据结构 DOM树 表示页面结构 渲染树 表示DOM节点如何显示 渲染树中为每个需要显示的 ...

最新文章

  1. cocos2d-js开发环境的搭建
  2. mysql导出长数字到excel避免显示为科学记数法 解决方法
  3. 连续八个季度双位数增长,这家公司业务成功得不像技术派
  4. 文巾解题 1646. 获取生成数组中的最大值
  5. mac bash file密码_Mac系统 | 菜鸟程序员项目模拟数据迁移,会安装Mysql服务端吗
  6. docker 容器监控_以简便的方式监控Docker容器中的ADF应用程序
  7. Mysql远程登录及常用命令
  8. 微内核和宏内核的区别_8086微处理器中的过程和宏之间的区别
  9. np.random的随机数函数
  10. oracle内存最多用到2g,在Oracle数据库中如何使用超过2G内存
  11. solidity return data和revert/require的reason string的获得
  12. vue 事件调用 传参_高效开发小程序,Vue 和微信小程序的区别你该了解一下
  13. Python实现多重弹窗脚本 整蛊朋友
  14. 万字长文爆肝呕血整理Python入门到精通,【巨详细,一学就会】
  15. 转 八部众---走出软件作坊:三五个人十来条枪 如何成为开发正规军(二十三)
  16. HEIC格式怎么转换?掌握这个方法,轻松实现!
  17. python 三维曲线拟合_python实现三维拟合的方法
  18. 计算机基础教程4 - 组件
  19. 家用千兆路由器排行榜前十名_2019最适合家用路由器哪个好_排行榜_智能家
  20. 二元关系的关系性质判断

热门文章

  1. 【设计】1359- Umi3 如何实现插件化架构
  2. 利用word2vec训练词向量
  3. android 夜间模式源码,Android Support Library 之 夜间模式
  4. 吴若权——洛可可动画电影馆
  5. 情商高手与小白的言辞,差别究竟在哪里?
  6. 电子计算机显示屏不亮了,手把手教你电脑显示器不亮怎么办
  7. swiper 轮播 多行多列 横向排列
  8. Windows10系统输入法热键设置
  9. [Deeplearning]对比散度算法(CD算法)
  10. 一篇文章带你了解——巨量引擎平台广告审核规则