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
參數
property |
|
第三種用法delete property只能在 with 語句中使用,用來刪除對象的屬性。
補充:在微軟的JScript中有CollectGarbage()函數可以用來回收內存,官方文檔不推薦使用此方法,你的程序不應該依賴此方法。IE在最小化的時候會進行回收內存。