《JavaScript高级程序设计 第三版》学习笔记 (二)执行环境与作用域链
来源:互联网 发布:mac网游 编辑:程序博客网 时间:2024/04/28 01:26
一、值和引用
1.基础类型值:js中五个基础类型unsigned、null、number、boolean、string,这些类型的变量名代表值;把这些变量当作参数传递给函数,解析器会复制一份形参给函数当局部变量用(注意,字符串也是传的值,和其他语言出入比较大)。2.引用类型值:js的其他类型object、function、array、date(array和date都是object)等,这些类型的变量名代表引用(或者说是没有*的指针);把这些变量当参数传递给函数,相当于传送了对象的引用(指针)复制了一份过去,函数对应的形参类型也是引用(指针)。熟悉C/C++的同学对这个区别肯定非常清楚。
3.变量的复制:清楚了1和2,这个就不难理解了。五大基础类型是复制值到信变量中去,引用类型是赋值地址到新变量中,新老变量指向一个实体。
4.既然函数从形参上面看不出来是值还是地址,就要用typeof检测类型。当然,绝大多数时候返回的都是object,用typeof意义不大,这是需要用instanceof。instanceof的作用是判断某个实例的构造函数是不是指定的。
二、执行环境和作用域
1.执行环境:执行环境定义了变量和函数有权访问的其他数据,决定了他们各自的行为。每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中。某个执行环境中的所有代码执行完毕后,该环境被销毁,保存在其中的所有变量和函数定义也随之销毁。可以理解为,一个执行环境,是由一对function{}括起来的。虽然这样说不很准确,但注意不是{}括起来,跟C不同。for{}括起来的就不能称作一个执行环境。2.作用域链:代码执行时,对于某个名称的变量,会创建个作用域链。第一个元素就是当前执行环境(function)中的局部变量,然后依次向外扩张,全局变量永远在最后一个。变量的寻找是按照名字,沿着作用域链一级一级回溯的。如果当前执行环境没有,就搜索下一级,知道搜索完毕。这样的结果就是,在function(执行环境)嵌套后,内层变量会覆盖外层同名变量,同名的局部变量对全局变量有屏蔽作用。
3.JS没有块作用域:在1里面也说了,C是用{}规划作用域的,但js不是。js是用function(){}来规划的。if(){}、for(){}、while(){}这些都不能成为独立的作用域。
4.作用域链是可以延长的:用try或着with。现在很少有人这么用。
5.局部变量不var的危害:使用局部变量不var,这个变量就会被添加到全局环境中,函数执行完之后,还会继续存在。
三、垃圾回收
1.一般是自动清理,引擎会每隔一段时间清理一次。其清理依据有标志位或引用次数等。2.可以手动启动垃圾回收过程:IE window.CollectGarbage();;opera7 window.opera.collect();。
3.系统分配给浏览器的内存很少,所以要优化js代码。一旦数据不用,最好将其值设为null。
0 0
- 《JavaScript高级程序设计 第三版》学习笔记 (二)执行环境与作用域链
- 《JavaScript高级程序设计 第三版》学习笔记 (二)执行环境与作用域链
- 《JavaScript高级程序设计 第三版》学习笔记 (二)执行环境与作用域链
- JavaScript执行环境及作用域链(摘自JavaScript高级程序设计第三版第4.2节)
- JavaScript高级程序设计(第2版) 学习笔记:(二)js函数作用域与闭包
- 《JavaScript高级程序设计 第三版》学习笔记 (八)块作用域及私有成员
- 《JavaScript高级程序设计 第三版》学习笔记 (八)块作用域及私有成员
- 《JavaScript高级程序设计 第三版》学习笔记 (八)块作用域及私有成员
- javascript执行环境及作用域【javascript高级程序设计】
- 《JavaScript高级程序设计》笔记——chapter4 变量的执行环境及作用域
- JavaScript高级程序设计(第三版)学习笔记(1)
- JavaScript高级程序设计(第三版)学习笔记(2)
- 学习java script 高级程序设计第三版笔记(二)
- 《JavaScript高级程序设计 第三版》学习笔记 (六) 函数与闭包详解
- 《JavaScript高级程序设计 第三版》学习笔记 (六) 函数与闭包详解
- 《JavaScript高级程序设计 第三版》学习笔记 (六) 函数与闭包详解
- Javascript高级程序设计学习笔记(二)
- JavaScript高级程序设计之变量、作用域和内存问题之执行环境及作用域第4.2讲敏敏笔记
- 使用github作为maven仓库发布自己的jar包依赖
- 计算机组成原理之原码、补码、反码和移码
- Lock和synchronized比较详解
- 用纯css改变下拉列表select框的默认样式
- How browsers work(浏览器工作原理)
- 《JavaScript高级程序设计 第三版》学习笔记 (二)执行环境与作用域链
- Caused by: java.lang.ClassCastException: org.springframework.web.SpringServletContainerInitializer c
- Ubuntu16.04安装mongodb
- ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
- 异常处理机制Try……Catch与Throws
- Python序列之set
- Java内部类
- Long型时间轴时间类型转为正常格式时间
- Ubuntu16.04 安装 Visual Studio Code之后启动不起来