4.1 变量 作用域 内存问题

4.1.1 基本类型和引用类型的值

复制变量值:
基本类型的复制:复制的是值
var num1 = 5;
var num2 = num1;
在这里插入图片描述
引用型变量的复制:复制的是引用,改变其中一个变量,就会影响另一个变量
var obj1 = new Object();
var obj2 = obj1;
obj1.name = “Nicholas”;
alert(obj2.name); //“Nicholas”
在这里插入图片描述

改变其中一个变量,就会影响另一个变量:例如
var person = new Object();
person.name = “tyt”;
var person2 = person;
console.log(person.name); //tyt
console.log(person2.name); //tyt
person2.name = “TYT”;
console.log(person.name); //TYT
console.log(person2.name); //TYT

4.1.2传递参数
ECMAScript中所有函数的参数都是按值传递的,也就说把函数外部的值复制给函数内部的参数,就相当于把值复制给另一个变量。
很多开发人员错误地认为:在局部作用域中修改的对象会在全局作用域中反映出来,就说明
参数是按引用传递的。为了证明对象是按值传递的,我们再看一看下面这个经过修改的例子:
function test (obj) {
obj.name = “tyt”;
alert(obj.name); //tyt
obj = new Object();
obj.name = “TYT”;
alert(obj.name); //TYT
alert(person.name); //tyt
}
var person = new Object();
test(person);
console.log(person.name); //tyt
说明:我个人比较简单的理解是这样的:如果object对象是按引用(引用地址)传递的,整个过程如下:函数首先传入一个对象引用地址,把这个引用地址的name指向“tyt”,然后再对这个对象进行重定义,把这个对象的引用地址又指向“TYT”,这样最后输出的对象的name应该是“TYT”,但实际却不是。说明这里是按值传递的,obj = new Object();这里相当于var obj = new Object();重新定义一个obj变量对象。仔细理解上面的输出。

4.1.3 对于引用类型的检测
使用instanceof 操作符
对引用类型的检测,我们并不是想知道它是对象,而是想知道它是什么类型的对象,例如
var person = {};
var arr = [];
var reg = /ab/;
console.log(person instanceof Object);//person 是object吗?true
console.log(arr instanceof Array);// arr是 Array吗 true
console.log(reg instanceof RegExp);// reg是RegExp吗 true

4.2.1 执行环境及作用域

每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个变量对象中。
当代码在一个环境中执行时,会创建变量对象的一个作用域链,作用域链的前端始终都是当前执行代码所在环境的变量对象,如果这个环境是函数,则将其活动对象作为变量对象,作用域链中的下一变量对象来自外部(包含)环境,再下一变量来自下一包含环境,作用域链的最后一个变量对象始终是全局执行环境。内部环境可以通过作用域链访问所有的外部环境,但外部环境不可以访问任何的内部变量和函数。只能向上搜索,不能向下搜索。

4.2.1 延长作用域链
这个还是没看懂,只能暂时先记到这。
主要有两种方式:这两个语句都会在作用域链的前端添加一个变量对象。
try catch
with语句

4.2.2 没有块级作用域
例如:
for (var i=0; i < 10; i++){
doSomething(i);
}
alert(i); //10
i在for循环之后仍然存在。

初始化变量没有用var声明时,这个变量将被当做全局变量。
查询标志符时,首先查找局部环境,根据作用域链向上查找,直到全局环境。

4.3.1垃圾收集

垃圾收集机制原理:找出那些不在继续使用的变量,然后释放其所占的内存。垃圾收集器会按照固定的时间间隔周期性的执行这一操作。
标记清除——谷歌
引用计数——IE

发布了9 篇原创文章 · 获赞 24 · 访问量 2630

猜你喜欢

转载自blog.csdn.net/qq_44758322/article/details/105374752