随笔-80  评论-117  文章-0  trackbacks-0

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

要删除的属性。

index

要删除的数组元素的序号。

 

第三种用法delete property只能在 with 语句中使用,用来删除对象的属性。

补充:在微软的JScript中有CollectGarbage()函数可以用来回收内存,官方文档不推荐使用此方法,你的程序不应该依赖此方法。IE在最小化的时候会进行回收内存。
  


posted on 2006-02-27 11:33 南哥 阅读(504) 评论(1)  编辑  收藏 所属分类: AJAX

评论:
# re: JavaScript中容易被误解的两个地方 2007-03-23 17:01 | hy
学习了
  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: