JavaScript中容易被误解的两个地方
时间:2007-04-20 来源:linxh
1. js中的变量作用域(Variable Scope)
和java,c++中不同的地方是,js中没有块作用域(Block Scope)。变量的作用域将从声明一直持续到function的结尾。看个例子就会明白了。
function testScope()
{
var a = "a";
function g() { alert(a); }
g(); //这里输出结果为a ,因为a的作用域将持续到function testScope的结尾
for(var i=0; i<2; i++)
{
var a = "a is changed"; //这里的变量a将覆盖开始声明的变量a
var b = "b"; //b的作用域从声明一直到function的结尾
}
alert(a); // 输出结果为 a is changed, js首先查找到的a是在循环中定义的那个
alert(b); // 输出为 b 在java中,此时将访问不到变量b,b已经出了作用域,但是在js中是可以的.
}
2. js中的垃圾回收(garbage collection)
js也是一门采用垃圾回收机制的语言,和java一样。js的解释器负责分配和回收内存。
程序员无需像C++中那样手动用delete释放内存。
但是js也有delete关键字,它是用来删除对象的属性,或者删除数组中的指定元素。并不能删除对象本身。用法如下:
delete objectName.property
delete objectName[index]
delete property
参数
objectName |
|
property |
|
第三种用法delete property只能在 with 语句中使用,用来删除对象的属性。
补充:在微软的JScript中有CollectGarbage()函数可以用来回收内存,官方文档不推荐使用此方法,你的程序不应该依赖此方法。IE在最小化的时候会进行回收内存。