變量是存儲信息的容器,JS變量可用來保存任何值閉包
變量類型
- JavaScript是一種無類型、弱檢測的語言,對變量的定義不須要聲明變量類型,只須要賦值便可。
變量的聲明
- 隱式和顯式聲明
- 隱式爲全局,顯式爲局部變量。隱式執行不會報錯,訪問它會報錯。
變量做用域
全局變量
- 全部在函數外面聲明的變量都處於全局做用域中
- 若是一個變量第一次初始化/聲明的時候沒有使用var關鍵字,那麼他自動加入到全局做用域中
- setTimeout中的函數是在全局做用域中執行的
var Value1 = 200;
var Value2 = 20;
var myObj = {
Value1 : 10,
Value2 : 1,
caleculatedIt: function(){
setTimeout(function(){
console.log(this.Value1 * this.Value2);
}, 1000);
}
}
myObj.caleculatedIt(); //4000
局部變量(處於函數級別的做用域)
- 沒有塊級做用域
- 在一個函數內定義的變量只能在函數內部訪問,或者這個函數內部的函數訪問。(閉包除外)
- 局部變量的優先級大於全局變量
- 若是在全局做用域中什麼的變量在局部做用域中再次聲明,那麼在局部做用域中調用這個變量時,優先調用局部做用域中聲明的變量
變量提高
- 因此的變量聲明都會提高到函數的開頭(若是這個變量在這個函數裏面)或者全局做用域的開頭(若是這個變量是一個全局變量)
function showName () {
console.log ("First Name: " + name);
var name = "Ford";
console.log ("Last Name: " + name);
}
showName ();
// First Name: undefined
// Last Name: Ford
var myName;
function myName () {
console.log ("Rich");
}
console.log(typeof myName); // function
- 在嚴格模式下,若是沒有先聲明變量就給變量賦值將會報錯
基本類型和引用類型
基本類型
- 指簡單的數據段。number、string、boolean、null、undefined
- 按值訪問,能夠直接操做保存在變量中的實際值
引用類型
- 指對象類型。好比Object、array、function、Data等
- 引用數據類型是保存在堆內存中的對象