js学习之变量、作用域和内存问题
标签(空格分隔): javascript
变量
1.基本类型和引用类型:
基本类型值:Undefined, Null, Boolean, Number, String;
特点:
- 在内存中占据着固定的地方和大小
- 从一个变量向另一个变量复制基本类型的值,会创建这个值的一个副本
引用类型值: 是指那些可能由多个值够成的对象
特点:
- 引用类型的值是对象,保存在内存堆中
- 包含引用类型值的变量复制引用类型的值,复制的实际是指针,因此两个变量最终都指向同一个对象
参数传递
所有函数的参数都是按值传递的。也就是说,把函数外部的值复制给函数内部的参数。
执行环境及作用域
每个函数都有自己的执行环境。
代码在一个环境中执行,会创建变量对象的一个作用域链(scope chain)。作用域链的用途,是保证堆执行环境有权访问的所有变量和函数的有序访问。
作用域链的前端,始终都是当前执行代码所在的环境变量对象。全局执行环境的变量始终都是作用域链的最后一个对象。
1.没有块级作用域:
if(true){
var color = "red";
}
alert(color) //red
在块级作用域中声明的变量将会添加到当前作用域中去。
在使用for语句时尤其注意这一点
for(var i = 0; i<10; i++){
doSomething(i);
}
alert(i) // 10
2.查询标识符:
搜索过程沿着作用域链向上逐级查询与给定名字匹配的标识符。
示例:
var color = "blue";
function getColor() {
var color = "red";
return color;
}
alert(getColor());//red
作者博客:pspgbhu
作者GitHub:https://github.com/pspgbhu
欢迎转载,但请注明出处,谢谢!