javascript高级程序设计第四章 变量、作用域和内存问题

变量包含两种,,基本类型和引用类型

  基本类型是指一些简单的字段;

  引用类型是?由多个值构成的对象  引用类型的值是保存在内存中的对象,在javascript中是不允许直接访问内存中的位置;

  函数的参数是按照值类型进行传递的,函数的参数可以看作是一个局部变量。

  检测类型:

    typeOf  用来检测基本类型的值用处大,在检测引用类型的值得时候用处不是很大  检测到的Null类型返回结果为Object,

    insctanceof 用来检测引用类型的值,当检测的对象是引用类型的值或者Object时返回true用来检测基本类型是返回flase。

执行环境和作用域:

  子集找不到的变量会向上进行搜索,子集可以访问父级的变量,父级不能访问子集的变量,在严格模式下未使用var声明的变量会报错;

在javascript中没有块级作用域,没有经过var声明的变量会当做全局变量来处理,但严格模式下会报错;

垃圾回收机制

  在javascript中不用程序员之际来管理内存,当一个变量没有被引用时,垃圾回收机制就会将该变量的内存收回,垃圾回收机制采用的是“标记清除”机制,使用“计数”机制会有BUG

当两个变量相互引用时,使用“计数”机制将会使两个变量不能被回收,当一个变量不使用时,最好将该变量复制为Null,这样当回收机制执行时,就会将该变量的内训收回;

  

时间: 2024-11-05 13:40:38

javascript高级程序设计第四章 变量、作用域和内存问题的相关文章

读书笔记 - js高级程序设计 - 第四章 变量 作用域 和 内存问题

5种基本数据类型 可以直接对值操作 判断引用类型 var result = instanceof Array 执行环境 每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中 执行环境的销毁 某个执行环境中的所有代码执行完毕后 该环境被销毁 保存在其中的所有变量了函数定义也会随之销毁 作用域链中的对象 全局执行环境的变更对象始终都是作用域链中的最后一个对象 没有块级作用域 if 和 for 内的变量 外部也可以访问 标记清除 不同浏览器 只不过垃圾时间的长短不同 引

JavaScript高级程序设计-第四章-变量、作用域和内存问题

ECMAScript变量 基本类型:5 引用类型 存于内存栈 实际对象位于内存堆 按值访问,可操作保存在变量中实际的值 js不能直接操作对象的内存空间,而是操作它的引用 不可添加属性和方法 可添加属性和方法 变量复制是一个实际的值,互不干扰 变量复制是一个指针,指向相同的对象,改变其中一个变量会影响另一个 Undefined   Null   Boolean   Number   String           variable typeof v v instanceof constructo

第四章 变量作用域和内存问题--笔记6

JavaScript没有块级作用域 使用var声明的变量会自动被添加到最近的环境中,如:在函数内部,最近的环境就是函数的局部环境,在with语句中,最近的环境就函数环境.如果初始化变量时没有使用var,则该变量自动被添加到全局环境. 在某个环境中读取或写入某个标识符时,就会在从作用域链的前端开始逐级向下查找,直至找到即停止搜索.

第四章 变量作用域和内存问题--笔记5(含问题)

作用域链得到延长的情况: try-catch语句的catch块:会创建一个新的变量对象,其中包含的是被抛出的错误对象声明. with语句:会将指定的对象添加到作用域链中. 问1:为什么url变成了buildUrl的变量,它不是在with中定义的吗? 答1:with语句关联了location对象,这意味着在with语句的代码块内部,每个变量首先被认为是一个局部变量,而如果在局部环境中找不到该变量的定义,就会查询location对象中是否有同名的属性,如果发现了同名属性,则以location对象属性

第四章 变量 作用域和内存问题

4.1变量 变量包含2种类型的值: 基本类型的值: 即undefined,null, string,number,boolean.   按值访问,可以操作保存在变量中实际的值, 不能添加属性. var name = "Nicholas"; name.age = 27; console.log(name.age); //undefined 引用类型的值:多个值构成的对象.JS不允许直接操作对象的内存空间.给一个对象添加属性是,是在实际的对象中添加. 俩种类型值的区别: 1.保存方式不同:

第四章 变量作用域和内存问题--笔记7

JavaScript的垃圾回收机制通常有两个策略: 标记清除(常用) 引用计数(不常用),在ie8-该策略会导致循环引用的问题. 优化内存的最佳方式:解除引用.这一做法适用于大多数全局变量和全局对象的属性.不过解除一个值的引用并不意味着自动回收该值所占用的内存,解除引用的真正作用是让值脱离执行环境,以便垃圾回收器下次运行时将其回收.

第四章 变量作用域和内存问题--笔记3

typeof可以准确检测到字符串.布尔.数值和undefined的值类型,但是如果变量值为null或者是一个对象的话,返回的就是object,检测函数时,该操作符会返回'function'. instanceof的使用方法:variable instanceof constructor ,若为该对象实例返回true,否则返回false. 注意:ECMA262规定任何在内如实现[[call]]方法的对象都应该在应用typeof操作符时返回function.由于Safari5-和chrome7-的正

javascript高级程序设计 第十三章--事件

javascript高级程序设计 第十三章--事件js与HTML的交互就是通过事件实现的,事件就是文档或浏览器窗口中发生的一些特定的交互瞬间. 事件流:事件流描述的是从页面中接收事件的顺序,IE的是事件冒泡流,Netscape的是事件捕获流,这个两个是完全相反的事件流概念. 事件冒泡:由最具体的元素接收,然后逐级向上传播到更高级的节点,即事件沿DOM树向上传播,直到document对象. 事件捕获:不大具体的节点应该更早接收到事件,相当于沿DOM节点树向下级传播直到事件的实际目标,在浏览器中,是

Javascript高级程序设计——第三章:基本概念

javascript高级程序设计——第三章:基本概念 一.语法 EMCA-262通过叫做ECMAScript的“伪语言”为我们描述了javascript实现的基本概念 javascript借鉴了C的语法,区分大小写,标示符以字母.下划线.或美元符号($)开头,注释可以用 // 或者/* */ 严格模式: ECMAScript 5引入了严格模式,在严格模式下不确定的行为将得到处理,通过在顶部添加 “use strict”来启用严格模式: function fuc(){ "use strict&qu