JavaScript第四章

变量、作用域和内存问题

  1. 基本类型和引用类型的值

(1)基本类型:按值访问(Undefined、Null、Boolean、Number、String)

(2)引用类型:按引用访问


基本类型


引用类型


动态属性


不能给基本类型的值添加属性


动态的添加、改变、删除属性和方法


复制变量值


在变量对象上创建一个新值,然后将该值复制到新变量分配的位置上(互不影响)


复制结束两个变量引用一个对象(互相关联)


传递参数


把函数外部的值复制给函数内部的参数


把这个值的内存地址复制给另一个局部变量


检测类型


使用typeof 检测基本类型,如果是null或对象,会返回“object”====返回的是string类型


使用instanceof 检测具体的类型:对象、数组或者正则等。语法:result = variable instanceof constructor。

  1. 执行环境及作用域

执行环境定义了变量或函数有权访问其他数据,决定了它们各自的行为;都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中。

所有全局变量和函数都是作为window对象的属性和方法创建的。某个执行环境中的所有代码执行完毕后,该环境被销毁,保存在其中的所有变量和函数定义也随之销毁。

代码在一个环境中执行时,会创建变量对象的作用域链,保证对执行环境有权访问的所有变量和函数的有序访问。

内部环境可以通过作用域链访问所有的外部环境,但外部环境不能访问内部环境中的任何变量和函数。环境之间的联系是线性有次序的,只可以向上搜索作用域链,以查询变量和函数名;下级的作用域链中包含的对象:自己的变量对象和上级的变量对象,直到全局变量对象。

标识符解析是沿着作用域链一级一级地搜索标识符的过程。搜索过程从更作用域链的前端开始,然后逐级地向后回溯,知道找到标识符位置,若找不到,会导致错误。

延长作用域链

执行环境的类型:全局和局部;

延长作用域链:有些语句可以在作用域链的前端临时增加一个变量对象,该变量对象会在代码执行后被移除。在下列两种语句会加长作用域链:

  • try-catch语句的catch块(创建一个新的变量对象,包含抛出的错误对象声明)
  • with语句(将指定对象添加到作用域链中)

没有块级作用域

变量是被添加到当前的执行环境中的,

使用var声明的变量会被自动添加到最近的环境中,在函数内部,最近的是函数的局部环境;with语句中,最接近的是函数环境,没有使用var初始化的,会自动添加到全局环境(不建议这样使用,严格模式下,初始化未经声明的变量会导致错误)。

查询标识符

标识符(变量名):查询时,先在局部环境中查找,没找到则继续向上搜索,一直到全局环境的变量对象,若还没找到,则是该变量尚未声明。若找到,则停止搜索,不在进入下一个变量对象。(局部环境有,则不使用父级的标识符)

  1. 垃圾收集

JavaScript具有自动垃圾收集机制。

标记清除(最常用的垃圾收集方式)

可以用任何方式来标记变量

引用计数

跟踪记录每一个值被引用的次数。代码存在循环引用现象时,不适用。

时间: 2024-10-05 03:37:49

JavaScript第四章的相关文章

javascript第四章总结

变量: javascript变量可以用来保存两种类型的值:基本类型和引用类型. 基本类型包括:Undefined,Null,Boolean,Number(用于所有的数值包括整数和浮点型) 和String. 这两者的特点是: 1.基本类型值在内存中占用固定大小的空间,一次被保存到栈的内存中: 2.从一个变量向里一个变量复制基本类型的值,会创建这个值的副本: 3.引用类型的值是对象,保存在堆得内存中: 4.包含引用类型的值得变量的实际上并不包含对象本身,而是一个指向该对象的指针: 5.从一个变量向另

慕课网JavaScript第四章编程练习

在一个大学的编程选修课班里,我们得到了一组参加该班级的学生数据,分别是姓名.性别.年龄和年级,接下来呢,我们要利用JavaScript的知识挑出其中所有是大一的女生的的名字哦. 学生信息如下: ('小A','女',21,'大一'),  ('小B','男',23,'大三'), ('小C','男',24,'大四'),  ('小D','女',21,'大一'), ('小E','女',22,'大四'),  ('小F','男',21,'大一'), ('小G','女',22,'大二'),  ('小H','女'

从思维导图中学习javascript第四章流程语句

javascript高级程序设计 第十四章--表单脚本

javascript高级程序设计 第十四章--表单脚本 在HTML中表单由<form>元素表示,在js中表单对应的是HTMLFormElement类型,这个类型也有很多属性和方法:取得表单元素的引用还是为它添加id特性,用DOM操作来获取表单元素:提交表单:把<input>或<button>元素的type特性设置为"submit",图像按钮把<input>元素的type特性设置为"image",也可以调用submit(

JavaScript高级程序设计:第十四章

第十四章 一.表单的基础知识 在HTML中,表单是由<form>元素来表示的,而在javascript中,表单对应的则是HTMLFormElement类型.HTMLFormElement继承了HTMLElement,因而与其他HTML元素具有相同的默认属性.不过,HTMLFormElement也有它自己下列独有的属性和方法. 取得<form>元素的引用方式有好几种.其中最常见的方式就是将它看成与其他元素一样,并为其添加id特性,然后再像下面这样使用getElementById()方

JavaScript高级程序设计(第3版)第四章读书笔记

第四章 变量.作用域和内存问题 ECMAScript变量可能包含两种不同数据类型的值:基本类型值和引用类型值.基本类型指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象.基本数据类型是:Undefined.Null.Boolean.Number和String.引用类型的值是保存在内存中的对象.JavaScript不允许直接访问内存中的位置,即不能直接操作对象的内存空间. 不能给基本类型的值添加属性,只能给引用类型值动态地添加属性. 从一个变量向另一个变量复制基本类型值时,两个变量可以参

JavaScript学习笔记(第四章——第六章)

时间戳(2015-06-09 20:58:00) 第四章:变量.作用于和内存问题          typeof:判断元素是什么类型            instanceof:检测引用类型对象是否未指定类型          注:所有引用类型皆为Object的实例          JavaScript没有块级作用域:                    例1: if(true){ var color = “blue”; } alert(color);               // bl

JavaScript语言精粹_第四章

4.1 函数对象 在JavaScript中,函数就是对象.对象是"名/值"对的集合并拥有一个连到原型对象的隐藏链接.对象字面量产生的对象连接到Object.prototype.函数对象连接到Function.prototype(该原型对象本身连接到object.prototype) 每个函数对象在创建是也随带一个prototype属性,它的值是一个拥有constructor属性且至即为该函数的对象 函数可以存放变量,可以被当作参数传递给其他函数,也可以在返回函数. 因为函数是对象,所以

JavaScript DOM编程艺术-学习笔记(第三章、第四章)

第三章: 1.js的对象分为三种:①用户自定义对象 ② 内建对象(js提供的对象) ③宿主对象(js寄宿的环境-浏览器,提供的对象) 2.文档是由节点组成的集合,即dom树,html元素是根元素,是唯一一个没有被其它元素包含的元素. 3.元素节点并非直接包含文本节点,例如:<ul><li>你好</li><ul>    ul元素并没有直接包含文本元素 4.获取元素的方法: ①getElementById() ②getElementsByTagName ()