在javaScript中有三種聲明變量的方式:const var let。
const:用于聲明常量。注意:定義的變量的時候,必須同時初始化,且其值之后不可以修改。
const PI=3.14; // const a;//報錯。沒有賦初值。 console.log('const PI:',PI);//輸出 // PI = 3.1415926;//報錯。不能賦值給一個常量。var:最常用的聲明變量關鍵字。 定義的變量的時候,若沒有初始化,不報錯,會輸出undefined。其值之后可以修改。var可以用來聲明全局變量,也可以聲明局部變量,依據它們聲明的位置:
全局變量:在函數外定義的變量;(注意:若沒有使用關鍵字聲明的變量,默認為全局變量。)作用域是整個代碼文件。 局部變量:在函數內定義的變量。作用域是當前的函數內部。var b ;//不報錯。 console.log('var b:',b);//輸出undefined b = 1 ;//賦初值 console.log('var b,外部賦值1:',b);//輸出1 //在代碼塊里的情況 { // console.log('var b,代碼塊的變量可以進入代碼塊內:',b);//輸出1 var b=2;//重新定義 console.log('var b,重新賦值后:',b);//輸出2 } console.log('var b,重新賦值后在代碼塊外的值:',b);//輸出2 //在函數里的情況 function varFun(){ console.log('var b,全局變量b:',b);//輸出2 var b=3;//局部變量b console.log('var b,局部變量b:',b);//輸出3,同時上一個輸出undefined(具體原因,見文末) var b2 = 33;//局部變量b2,在函數外獲取不到值 b3 = 333;//全局變量b3,在函數外可以獲取到值 } varFun();//執行函數 console.log('var b,函數執行后,函數外的b是全局變量b的值:',b); // console.log('函數內var定義的變量b2=33,在外部獲取不到:',b2);//報錯,b2 為定義。 console.log('函數內確實關鍵字定義的變量b3=333,會被當做全局變量:',b3);//輸出333let:塊級作用域 。在塊級{}里面用let定義的變量,離開當前的塊{}之后,就不能使用(有點像局部變量,但作用域不一樣)。注意:{...}一對花括弧就就是一個特定的代碼塊,包括直接的{},流程語句的{},函數的{},....。函數聲明時本身就帶有{},也是屬于一個代碼塊。
var c=11; { let c=12; console.log('let c=12,b的值:',c);//輸出12 } console.log('代碼塊外c的值:',c);//輸出11【關于var聲明變量,在函數里面的那個問題:】原因是:function作用域里的局部變量聲明會被提前到最前面。詳細的可見:http://www.cnblogs.com/silentjesse/p/4024536.html
新聞熱點
疑難解答