《你不知道的javascript》读书笔记-上卷-第二章:this的全面解析
1,调用位置
调用栈:为了到达当前执行位置,从而调用的所有函数构成调用栈。
调用位置:当前正在执行的函数的前一个调用。
代码示例:
<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title></head><body></body><script type="text/javascript">function baz(){console.log("baz")bar()}function bar(){console.log("bar")foo()}function foo(){debuggerconsole.log("foo")}baz()</script>
</html>
打开chrome的调试工具:
可以很清晰地看到,调用栈是baz>bar>foo,当前执行函数是foo(我在此处debugger了),所以,调用位置,就是foo的上一个调用,也就是bar。
2,this的指向问题
1,以函数形式 直接调用时,this指向window
2,以方法的形式调用时,this指向调用方法的对象,谁调用就指向谁,
3,以构造函数的形式调用时,this指向新创建的对象
4,以call和apply调用时,this指向其指定的首参对象
其中前面的3点都可以理解为:谁调用,this就指向谁。
因为第一点:其实是window对象在直接调用函数。
第二点,就更是那个对象在调用。
第三点,则需要理解new过程发生了啥。
new过程发生的事情:
1,创建一个新的对象,这时候这个对象是个无根浮萍(没有指针指向它)
2,新对象执行原型连接(即创建一个__proto__属性指针指向构造函数的prototype原型对象)
3,this指向这个新对象(实质上是newObj.Fn(),即新对象在调用这个构造函数,故而this指向新的对象)
4,返回这个新对象。(这时才是赋值,让有指针指向这个新对象)
这样一来,创建新对象的过程中为啥this的指向会是新对象的问题,就变得很明了了:
function foo(a){this.a=a
}
var bar=new foo(2)
console.log(bar.a) //2
至于第四点,属于硬绑定(显示绑定),this的指向被人为地转向首参对象。
3,优先级问题
call.bind,apply等地显示绑定优先级高于new 再高于隐式绑定
4,箭头函数的this问题
箭头函数的this,仅仅是根据外层(函数或者全局)作用域来决定指向。
并且它的绑定不会被修改。
例如:
function foo(){setTimeout(()=>{//这里的this在词法上继承自foo()console.log(this.a)},100)
}
var obj={a:2
}
foo.call(obj) //2
《你不知道的javascript》读书笔记-上卷-第二章:this的全面解析相关推荐
- 你不知道的javascript读书笔记3
概述 这是我看<你不知道的JavaScript(中卷)>中关于类型检查的笔记,供以后开发时参考,相信对其他人也有用. typeof 我们知道js中有七种内置类型:undefined, nu ...
- 《计算传播学导论》读书笔记:第二章 文本分析简介
目录 第二章 文本分析简介 第一节 文本分析研究现状 第二节 文本分析与传播学研究 一.为什么文本挖掘技术逐渐受到传播学者的关注? 二.不同的文本分析研究对传播学的理论贡献 第三节 文本分析的基本步骤 ...
- 大学计算机第七版读书笔记(第二章)
大学计算机精简内容第二章 1,计算机系统 计算机系统由硬件系统和软件系统组成. 硬件系统中又分为主机和外部设备.主机中有由运算器和控制器组成的中央控制器(CPU),和随机内存存储器(RAM),只读内存 ...
- 《谈判力》读书笔记:第二章 把人和事分开
第二部分 原则谈判方法的四条原理 第二章 把人和事分开 2.1 谈判者首先是人 谈判中的对方不是抽象化的代表,而是一个个活生生的人. 是人就都有感性与理性的两面. 这种两面性对与谈判来说,有其益处,但 ...
- 深入理解计算机系统读书笔记(第二章 信息的表示和处理)
这里写自定义目录标题 第二章 信息的表示和处理 2.1 信息存储 2.1.1 十六进制表示法 2.1.2 字数据大小 2.1.3 寻址和字节顺序 2.1.4 表示字符串 2.1.5 代码表示 2.1. ...
- python程序格式框架的描述_python 程序语言设计(嵩天)-学习笔记(第二章python 程序实例解析)...
第 2 章 python 程序实例解析 学习目标: 掌握解决计算问题的一般方法. 掌握python语言的基本语法,包括缩进.变量.命名等. 掌握python语言绘制图形的一般方法. 了解python标 ...
- 《数论概论》读书笔记(第二章)勾股数组
本章主要讨论的是本原勾股数组,也就是关于满足a2+b2=c2a^2+b^2=c^2的三元组(a,b,c)(a,b,c),且(a,b,c)(a,b,c)互质的问题. 这章中提到一个概念:本原勾股数组(P ...
- 你不知道的javaScript读书笔记(六)
this全面解析 笔记: this的运行机制: (1) this是在运行时绑定的,并不是在编写时绑定,它的上下文取决于函数调用时的各种条件.this的绑定和函数声明的位置没有任何关系,只取决于函数的调 ...
- 你不知道的javascript读书笔记
这本书真的挺不错的,感觉以前很多不敢碰,很迷茫的问题都解决好多,看到模块化记录一下自己的理解 下面是代码: var MyModules = (function Manager() { var modu ...
- 《机器学习》读书笔记,第二章概念学习和一般到特殊序
本章展示了几种概念学习算法,并讨论了这些算法能收敛到正确假设的条件.这里还分析了归纳学习的本质以及任意程序能从训练数据中泛华的理由. 2.1概念学习: 从有关某个布尔函数的输入输出训练样例中推断出该布 ...
最新文章
- memcached部署
- 用户密码加密存储十问十答,一文说透密码安全存储
- 他们为什么选择中科大少年班?官方公布48名新生名单,有人因偶像曹原,有人只是不想经历高三...
- 乾坤 微前端_微前端架构初探以及我的前端技术盘点
- mix2s android p内测,历时一个月,MIX2S成小米首款Android P公测机型
- linux拒绝tcp链接,Linux 内核 TCP SACK 拒绝服务问题
- SSH2+Daoz项目中的分页查询
- 服务器和交换机之间网络协议,网络协议是计算机网络中服务器,计算机,交换机.doc...
- 公需科目必须学吗_要考电工证吗?电工技术必须学的33招,电工技术知识
- Symbian和C++ SDK开发入门之运行
- 在delphi中如何动态建立类的实例
- C#在线打开编辑保存Excel文件[pageoffice]
- 他毕业1年,换了5份工作,为什么失业的总是他?
- VS201X更换平台Rebuild项目时,旧平台生成的发布件被删除
- 【物理世界】Ψ的前世今生
- Hive 优化之 推测执行
- python画爱心 好看漂亮的表白代码
- mac的系统语言怎么设置为中文
- Openssh更新升级7.9p1步骤
- ASCII码作用简介