JavaScript笔记-4

变量,作用域和内存问题

变量

检测变量种类使用typeof(),检测对象种类用instanceof()

基本类型值

基本类型包括Null,Undefined,Number,Boolean,String,保存在栈内存中/
基本类型值是按值访问的,可以操作保存变量中实际的值

动态属性

不同于引用类型,不能给基本类型的值添加属性

复制变量值

复制变量值时,复制后的两个变量可以进行任何操作而不互相影响

传递参数

在ECMAScript中,所有的函数的参数都是按值传递的

      
      
1
2
3
4
5
6
7
8
      
      
function (num){
num += 10;
return num;
}
var count = 20;
var result = add(count);
alert(count);
alert(result); //30

在函数内部为count增加了10,但是函数外部的count依然是20,并没有受到影响

引用类型值

引用类型包括Object,保存在堆内存中.
引用类型值是按引用访问的,因为不能直接访问对象的内存空间

当复制保存对象的某个变量时,操作的是对象的引用,但为对象添加属性时,则操作的是实际的对象

动态属性

能给基本类型的值添加属性

复制变量值

复制变量值时,复制后的两个变量将引用同一个对象,操作会互相影响

传递参数

在ECMAScript中,所有的函数的参数都是按值传递的

      
      
1
2
3
4
5
6
7
8
      
      
function setName(obj){
obj.name = "Nick";
obj = new Object();
obj.name = "Gnomeek";
}
var person = new Object();
setName(person);
alert(person.name); //"Nick"

在函数内部为obj的属性重设置为”Gnomeek”,但没影响到外部输出的结果,依然是”Nick”

执行环境及作用域

执行环境

      
      
1
2
3
4
5
6
大专栏   JavaScript笔记-4class="line">7
8
9
10
11
12
13
14
      
      
var color = "blue";
function changeColor(){
var anotherColor = "red";
function swapColors(){
var tempColor = anotherColor;
anotherColor = color;
color = tempColor;
// 这里可以访问 color、anotherColor 和 tempColor
}
// 这里可以访问 color 和 anotherColor,但不能访问 tempColor
swapColors();
}
// 这里只能访问 color
changeColor();


每一个环境都可以向上搜索作用链域,而永远不能向下搜索
例如全局环境只能访问在全局环境中定义的变量和函数,而不能直接访问局部环境中的任何数据;而局部环境不仅可以访问函数作用域中的变量,而且有权访问其父环境,乃至全局环境。

没有块级作用域

声明变量

使用var声明变量时,会自动添加到最接近的环境中,如果没使用var来声明,则会自动添加到全局环境中。

查询标识符

整个搜索过程从作用域链的前端开始,向上逐级查询与给定名字匹配的标识符;查询到就立即停止,不会继续查询
局部环境中的变量:

      
      
1
2
3
4
5
6
      
      
var color = "blue";
function getColor(){
var color = "black";
return color;
}
alert(getColor()); //black

全局环境中的变量:

      
      
1
2
3
4
5
      
      
var color = "blue";
function getColor(){
return color;
}
alert(getColor()); //blue

不存在的变量:

      
      
1
2
3
4
      
      
function getColor(){
return color;
}
alert(getColor()); //不存在的变量

猜你喜欢

转载自www.cnblogs.com/lijianming180/p/12370606.html
今日推荐