1、宣告變數
在JS當中一個變數的作用域(scope)是程式中定義這個變數的區域。變數分為兩類,全域性(global)的和區域性的。其中全域性變數的作用域是全域性性的,即在JavaScript程式碼中,它處處都有定義。而在函式之內宣告的變數,就只在函式體內部有定義。它們是區域性變數,作用域是區域性性的。函式的引數也是區域性變數,它們只在函式體內部有定義。
1.1 var變數宣告方式
在javascript中var關鍵字宣告變數具有兩個特點,第一變數提升(對變數的定義會預設提前至函式開始處),第二變數沒有塊作用域只有函式作用域。
(function scope() {
var i = 10;
(function innerscope() {
console.log(i);
var i = 10;
})();
})();
=====
undefined
程式碼1.1.1中,第二個變數i的定義提前至函式innerscope開始位置,因此在console.log(i)的時候i並沒有賦值,因此輸出結果為undefined。
(function scope() {
if(true){
var i =10;
}
console.log(i);
})();
=====
10
程式碼1.1.2中,在if塊中定義的變數i在if塊外函式內依然可以使用,因此輸出結果10.
1.2 let宣告變數方式
在ES6的標準中,新引入了let關鍵字用於宣告變數,let關鍵字與var關鍵字不同在於let為塊作用域。 將1.1.2中程式碼定義變為let後,程式則不能執行。
程式碼 1.1.2
(function scope() {
if(true){
let i =10;
}
console.log(i);
})();
=====
i is not defined
1.3 const宣告變數方式
const用來宣告常量,一旦宣告,其值就不能改變,並且const定義的變數為塊作用域,比如1.3.1和1.3.2這樣編寫程式碼是會出錯的。
程式碼1.3.1
(function scope() {
if(true){
const pi =3.14;
}
console.log(pi);
})();
=====
pi is not defined
程式碼1.3.2
(function scope() {
const pi = 3.14;
pi=3;
console.log(pi);
})();