DIV CSS 佈局教程網

淺說js變量
編輯:關於JavaScript     
復制代碼 代碼如下:
/*
1, 變量類型:
JavaScript 是弱類型, 變量可存儲任意類型, 並且運行期間類型可變;
-> 變量可進行類型轉換;
*/


/*
2, 變量聲明:
*/
var i;
var index;
var i, index;
var i = 0, index = 2;
/*
變量聲明, 無初始值時, 值為 undefined;
並且 var 聲明的變量, 不能使用 delete 操作符刪除;
重復聲明為產生覆蓋, 不會造成錯誤;
遺漏聲明, 則會把變量隱式聲明此變量, 並做為全局變量; (下節介紹)
*/


/*
3, 變量作用域:
以函數劃分: 函數內部聲明的變量, 只能運行的函數內部, 即局部變量; (閉包仍可引用);
內部變量比全局變量優先級別高; ex:
*/
var g = 'global';
function check() {
var g = 'local';
console.log(g); // local
}
check();
/* 變量盡可能都使用 var 聲明 */
/* 沒有塊級作用域 */
if (false) {
var test = 2;
function t() {
console.log('t function');
}
}
t(); // t function;
console.log(test); // undefined;
/*
例外:
firefox 會報錯;
t is not defined;
test 值為 undefined;(末聲明和賦值的變量都是 undefined)
*/

/* 變量聲明會提前掛起 */
function f() {
console.log(test); // undefined
var test = 'test';
console.log(test); // 'test'
}
// 轉化為
function f() {
var test;
console.log(test); // 變量僅聲明, 則初始化為 undefined
test = 'test';
console.log(test); // 變量已賦值, 'test'
}
/* 未定義變量和未賦值變量 */
console.log(t); // 直接使用變量 t;
// 注: 直接給變量賦值時, 會隱式的把變量做為全局對待;
var t; // 未賦值變量, undefined;

/*
4, 基本類型和引用類型:
Number/boolean/null/undefined/ 基本類型;
Array/Object/Function 引用類型
第五版, 63頁:
無論將字符串看作是行為與基本類型相似的不可變引用類型,
還是將它看作使用引用類型的內部功能實現的基本類型, 結果都是一樣的;
即: String 類型表現為 基本類型;
下面實例說明基本類型和引用類型差別:
*/
var a = 3.14;
var b = a;
a = 4;
console.log(a, b); // 4, 3.14;

var a = [1, 2, 3];
var b = a;
a[0] = 99;
console.log(a, b); // 相同; [99, 2, 3];
// 數組是引用類型, 變量a和b 指向同一塊內存地址;
// 變量保存基本類型的實際值, 而保存引用類型的引用(類指針);

/*
5, 垃圾收集
引用類型是沒有固定大小的, 比如: Array, 隨時可以修改 length;
變量並不能直接保存引用的值, 而是被存儲在某個位置, 變量保存的只是對此位置的引用.
所以, JavaScript 會動態分配內存來存儲實體;
最終要釋放這些內存以便再用, 否則會消耗所有可用內存導致系統崩潰;
JavaScript 不要求手動釋放內存; 它使用一種稱為垃圾收集方法[方法不可見];
它會把對不再使用的對象所占用的內存釋放;
*/
var s = 'hello';
var u = s.toUpperCase();
s = u; // 不能再獲取到 'hello' 值;
// 環境中不再有 'hello' 引用[沒有變量指向它]
// (是否進行回收, 是通過是否存在賦值決定的)
/*
6, 作為屬性的變量
全局對象
window, this, Math;
浏覽器中的:navigator, screen;
局部變量:調用對象
調用對象
全局變量是特殊的全局對象的屬性, 那麼局部變量被稱為調用對象(call object)的屬性;
函數的參數和局部變量作為調用對象的屬性而存儲;
(使用獨立對象存儲局部變量使 JavaScript 可防止局部變量覆蓋同名全局變量的值)
JavaScript 的執行環境
JavaScript 解釋器執行一個函數時, 會為函數創建一個執行環境(execution context);
一個執行環境就是所有 JavaScript 代碼段執行時所在的環境.
運行不屬性任何函數的 JavaScript 代碼的環境使用的就是全局對象.
所有 JavaScript 函數都運行在 自己獨有的執行環境中, 並且有自己的調用對象, 在調用對象中定義了局部變量.
JavaScript 解釋器可在不同的全局執行環境中運行腳本, 並且這些環境不脫節, 彼此可引用;
(window-iframe);
深入理解變量作用域
每個 JavaScript 執行環境都有一個和它關聯在一起的作用域鏈(scope chain);
作用域鏈是一個對象列表或對象鏈;
當 JavaScript 代碼需要查詢變量 X 的值時, 它就開始查看此鏈上的第一個對象;
如果對象存在一個名為 x 的屬性, 那麼就采用那個屬性的值.
如果沒有, JavaScript 會繼續查詢鏈中的第二個對象.
如果還沒有找到, 繼續查詢下一個對象. 以此類推...
補充:
f() 作用域 -> 閉包作用域 -> var 變量所在作用域
-> Object 的原型作用域 -> Object 類屬性作用域
-> 頂層作用域(window);
*/

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved