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对象。

**每个函数都有自己的执行环境:**一个 执行流 进入一个函数时,函数的环境就被推入一个环境栈,在函数执行之后,栈就将其环境弹出。把控制权返回给之前的执行环境。

**当代码在一个环境执行时,会创建变量对象的一个 作用域链 **作用域链保证对执行环境有权访问的所有变量和函数的有序访问。作用域链的前端是当前执行环境的代码所在环境的变量对象。作用域链的下一个变量对象来自外部环境。

标识符解析是沿着作用域链一级一级搜索标识符的过程。

延长作用域链


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Servlet与JSP核心编程

Servlet与JSP核心编程

(美国)霍尔等著、赵学良译 / 霍尔 / 清华大学出版社 / 2004-06-01 / 59.0

《Servlet与JSP核心编程》(第2版)叙述详尽,条理清晰。对于初学者来说是一本不可多得的入门书籍,经验丰富的Servelet和JSP开发人员也可以通过阅读《Servlet与JSP核心编程》(第2版)得到巩固和提高。一起来看看 《Servlet与JSP核心编程》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具