4. javacript高级程序设计-变量、作用域和内存问题
1.1 基本类型和引用类型的值
变量包含两种不同数据类型的值:基本类型值和引用类型值。基本类型值指的是简单的数据段,引用类型值可以由多个值构成的对象
1.1.1 动态的属性
针对引用对象的值,可以为其动态的添加属性和方法
var person = new Object();
person.name = “chuck”;
alert(person.name); // chuck
1.1.2 复制变量值
(1). 基本类型的变量复制
var num = 5;
var num2 = num;
复制前:
|
num |
5(Number类型) |
复制后:
|
num2 |
5(Number类型) |
|
num |
5(Number类型) |
(2). 引用类型的变量复制
var obj1= new Object();
var obj2=obj1;
obj1.name = “chuck”;
alert(obj2.name) //chuck

1.1.3 传递参数
参数传递情况和复制情况一致,即将变量的值复制到指定的参数中
1.1.4 检测类型
基本类型使用 typeof 检查
引用类型使用 instanceof,语法如下:
result = variable instanceof constructor
例如:
person instanceof Object
colors instanceof Array
pattern instanceof RegExp
1.2 执行环境及作用域
执行环境定义了变量或者函数有权访问的其他数据,决定了它们各自的行为。
每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中。
全局执行环境是对外围的一个执行函数,在web浏览器中,全局执行环境被认为是window对象,因为所有全局变量和函数都是作为window对象的属性和方法建立的
每个函数都有自己的执行环境,当执行流进入一个函数时,函数的环境就会被推入一个环境栈中,当这个环境执行之后,栈将其环境弹出,把控制权返回给之前的执行函数
当代码在一个环境中执行的时候会创建一个作用域链,作用域链的前端,始终都是当前执行的代码所在的环境的变量对象。如果这个环境是函数,则将其活动对象作为变量对象。活动对象最开始的时候只包含一个变量,即arguments对象,作用域链中的对象来自外部环境,而下一个变量对象则来自于下一个包含环境,这样一直延续到全局变量,全局变量的执行环境始终都是作用域链中的最后一个对象。
作用域链中的对象,内部环境可以通过作用域链访问外部环境,外部环境不能访问内部环境
|
var color = "blue"; function changeColr(){ var anotherColor = "red"; function swapColor(){ var tempColor = anotherColor; anotherColor = color; color = tempColor; //这里可以访问color、anotherColor和tempColor } //这里可以访问color、anotherColor,但 不能访问tempColor swapColor(); } //这里只能访问color changeColr(); |

1.3 垃圾回收
javascript具有自动垃圾回收机制
(1). 离开作用域的值将自动标记为可以回收,将在垃圾收集期间被删除
(2). “标记清除”是目前主流的垃圾回收算法
(3). 另一种垃圾回收算法是“引用计数”
(4). 解除变量不仅能够消除循环引用,而且对垃圾回收也有好处
4. javacript高级程序设计-变量、作用域和内存问题的更多相关文章
- 第一百零六节,JavaScript变量作用域及内存
JavaScript变量作用域及内存 学习要点: 1.变量及作用域 2.内存问题 JavaScript的变量与其他语言的变量有很大区别.JavaScript变量是松散型的(不强制类型)本质,决定了它只 ...
- 3. javacript高级程序设计-基本概念
1.1 语法 ECMAScript借鉴了C和其他类C语言的语法 1.1.1 区分大小写 ECMAScript中的一切(变量,函数和操作符)都是区分大小写的,变量test和Test是不同的变量 1.1. ...
- 笔记-JS高级程序设计-变量,作用域和内存问题
1在将一个值赋给变量时,解析器必须确认这个值是基本类值还是引用类型值,基本类型值是按值访问的,可以操作保存在在变量中的实际值,引用类型是保 存在内存中的对象,JS不允许直接访问内存中的位置,所以实际操 ...
- 读书笔记 - js高级程序设计 - 第四章 变量 作用域 和 内存问题
5种基本数据类型 可以直接对值操作 判断引用类型 var result = instanceof Array 执行环境 每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这 ...
- javascript高级程序设计第3版——第4章 变量作用域以及内存
- 6. javacript高级程序设计-面向对象设计
1. 面向对象设计 1.1 理解对象 1.1.1 属性类型 (1). 数据属性:相当于对象的字段,包含一个数据值的位置,在这个位置可以读取和写入值.数据属性中有4个描述其行为的特性: l [[Conf ...
- JavaScript变量作用域和内存问题(二)
执行环境是js中特别重要的概念,是指变量或者函数可以访问其他数据,定义自己的行为.每个执行环境都有一个与之相对应的变量对象,执行环境中定义的所有变量和函数都保存在这个变量中,我们看不到这个变量,但是后 ...
- js 变量 作用域及内存
由于Javascript是松散型的,所以其变量只是在特定时间用于保存特定值的一个名字而已,并不存在某个变量必须保存某种类型的值的规则,变量的值以及其数据类型都可以在脚本的声明周期内改变 一.基本类型与 ...
- 浅谈javascript中变量作用域和内存(1)
先理解两个概念:基本类型和引用类型的值 1.基本类型和引用类型的值 (1)定义: 基本类型:指简单的数据段,比如按值访问的js五种基本数据类型undefined.null.boolean.number ...
随机推荐
- [MySQL FAQ]系列 — 为什么InnoDB表要建议用自增列做主键
我们先了解下InnoDB引擎表的一些关键特征: InnoDB引擎表是基于B+树的索引组织表(IOT): 每个表都需要有一个聚集索引(clustered index): 所有的行记录都存储在B+树的叶子 ...
- jQuery.extend和jQuery.fn.extend的区别?
jquery 本身 是由 Resig: 莱希格, 一个美国的小伙子小伙伴开发的, 在2005年 prototype发表之后, 在2006年1月发表的, 后来进入mozilla工作, mozilla的j ...
- Linux操作、hadoop和sh脚本小结
近期一直在忙项目上的事情,今天对以前的工作做一个简单的小结.明天就是国庆节啦. 1 脚本可以手动执行,可是crontab缺总是找不到路径? #!/bin/bash. /etc/profile . / ...
- jQuery 2.0发布,不再支持IE6/7/8
有时发现jQuery库引用的都对,javascript代码写的也没问题,可是jquery就是出现问题,额--我发现换个jquery库就没问题了,长时间不关注jquery的问题而已: 很多人都没有使用最 ...
- 【Solr】copy字段的应用
目录 界面查询应用 熟悉Schema.xml copy域的应用 回到顶部 界面查询应用 添加一个文档 查询添加的文档 以上详细介绍了query里面的参数详解. 当不输入任何条件时,进行查询,看看返回结 ...
- 自动去除nil的NSDictionary和NSArray构造方法
http://www.jianshu.com/p/a1e8d8d579c7 极分享 http://www.finalshares.com/
- webpack 教程 那些事儿06-gulp+webpack多页
本篇主要讲述用gulp+webpack构建多页应用 折腾到现在,项目还必须要进行,.vue文件必须要加载,也就是webpack必须引入.时间不多了,抛弃上个方案之后,只能牺牲热加载性能,用gulp+w ...
- input注意事项
一.更改place-holder颜色 input::-webkit-input-placeholder { color: #D6D0CA !important; /* WebKit browsers ...
- 面向对象的 CSS (OOCSS)
原文链接:来自smashing magazine 译文 你是否听说过一个词语叫“内容就是王道”?作为一个 Web 开发者,我们的工作与内容创作有着频繁的联系.这是一条经常被引用,并且正确地解释了什么因 ...
- 十进制转为N进制
昨天笔试遇到的题,如果是正数,不断以余数做除法即可: void convert(int num, int N, vector<char>& data) { int number = ...