ECMAScript学习笔记(二)
栏目: JavaScript · 发布时间: 6年前
内容简介:JavaScript高级程序设计的第四章。讲解了如何理解基本类型和引用类型的值,理解执行环境和垃圾回收。ECMAScript变量松散的性质,决定了变量知识在特定时间内用于保存特定值的一个名字而已。Undefined、Null、Boolean、Number、String类型是按值访问的。引用类型的值是保存在内存中的对象。ECMAScript不允许直接访问内存中的位置,在操作对象时,实际上操作的是对象的引用而不是实际的对象。
变量, 作用域和内存问题
JavaScript高级程序设计的第四章。讲解了如何理解基本类型和引用类型的值,理解执行环境和垃圾回收。
ECMAScript变量松散的性质,决定了变量知识在特定时间内用于保存特定值的一个名字而已。
基本类型VS引用类型
基本类型:简单的数据段
引用类型:多个值构成的对象
Undefined、Null、Boolean、Number、String类型是按值访问的。引用类型的值是保存在内存中的对象。ECMAScript不允许直接访问内存中的位置,在操作对象时,实际上操作的是对象的引用而不是实际的对象。
动态的属性
定义基本类型和引用类型,都需要创建一个变量并为其赋值。
对于引用类型,我们可以为其添加或删除属性和方法。而不能对基本类型的值这么做。
var person = new object(); person.name = "Micheal";
复制变量值
从一个变量向另一个变量复制基本类型的值,会在变量对象上创建一个新的值。然后将该值复制到新变量分配的位置上。
而从一个变量向另一个变量复制引用类型的值时,也会创建一个新的值,分配到为新变量分配的空间中。但不同的是,这个值的副本是一个指针,指针指向的是存储在堆中的同一个对象。复制操作结束后,两个变量引用的是同一个值。跟 Java 差不多嗯。
传递参数
ECMAScript中的所有函数的参数都是按值传递的->即,把函数外部的值复制给函数内部的参数。
在项函数传递引用类型的值时,会将这个值在内存中的地址复制给一个局部变量。故,这个局部变量的变化会反映在函数的外部。
检测类型
typeof用于检测一个变量是不是基本类型。
而在检测引用类型时,这个操作符的用处不大。我们可以用instanceof操作符来检测一个值是否是某种类型的。
result = variable instanceof constructor
执行环境和作用域
执行环境定义了变量、函数有权访问的其他数据,决定了它们各自的行为。
**每个执行环境,都有一个与之相关的变量对象(variable object):**这个对象保存了环境中定义的所有变量和函数。
**全局变量:**是一个最外围的执行环境。根据ECMAScript实现的宿主环境不同,表示的执行环境的对象也不同。在Web浏览器中,全局执行环境被认为是window对象。
**每个函数都有自己的执行环境:**一个 执行流
进入一个函数时,函数的环境就被推入一个环境栈,在函数执行之后,栈就将其环境弹出。把控制权返回给之前的执行环境。
**当代码在一个环境执行时,会创建变量对象的一个 作用域链
**作用域链保证对执行环境有权访问的所有变量和函数的有序访问。作用域链的前端是当前执行环境的代码所在环境的变量对象。作用域链的下一个变量对象来自外部环境。
标识符解析是沿着作用域链一级一级搜索标识符的过程。
延长作用域链
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 【每日笔记】【Go学习笔记】2019-01-04 Codis笔记
- 【每日笔记】【Go学习笔记】2019-01-02 Codis笔记
- 【每日笔记】【Go学习笔记】2019-01-07 Codis笔记
- Golang学习笔记-调度器学习
- Vue学习笔记(二)------axios学习
- 算法/NLP/深度学习/机器学习面试笔记
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Servlet与JSP核心编程
(美国)霍尔等著、赵学良译 / 霍尔 / 清华大学出版社 / 2004-06-01 / 59.0
《Servlet与JSP核心编程》(第2版)叙述详尽,条理清晰。对于初学者来说是一本不可多得的入门书籍,经验丰富的Servelet和JSP开发人员也可以通过阅读《Servlet与JSP核心编程》(第2版)得到巩固和提高。一起来看看 《Servlet与JSP核心编程》 这本书的介绍吧!