js学习之变量、作用域和内存问题

时间:2023-03-08 17:25:19
js学习之变量、作用域和内存问题

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

欢迎转载,但请注明出处,谢谢!