js中變量的定義的三中方法:const,var,let
1.const
const 設置的是常量,一經設置不可改變。在設置時必須賦初值。
2.var
var設置的是變量,可以不賦初值。
如果不賦初值的話,變量的類型為undefined;
如果賦值為:
var a="";
則a 的類型為string;
定義時,有無加var的區別:
在JS里的全局環境就是一個對象,這個對象也是JS運行的根,對瀏覽器中的JS,這個對象就是window對象。對全局JS語句來說,window對象就相當於當前作用域。
1 var mylike="java";//定義了window作用域的一個變量 mylike; 2 yourlike="c#"; //定義了window作用域的一個屬性 yourlike;
在全局語句中,加不加var並沒有什么區別,但在函數體中加不加var是有區別的
1 var mylike = "c#"; 2 yourlike = "c++"; 3 console.log("mylike is "+mylike+" "+"yourlike is "+yourlike); //mylike is c# yourlike is c++ 4 function change(){ 5 console.log("in the function 's mylike "+mylike+"in the function's yourlike "+yourlike); //in the function 's mylike undefinedin the function's yourlike c++ 6 7 var mylike = "java"; 8 yourlike = "php"; 9 console.log("change mylike "+mylike+"change yourlike "+yourlike); //change mylike javachange yourlike php 10 } 11 change(); 12 console.log("next mylike "+mylike+""+"next yourlike "+yourlike); //next mylike c#next yourlike php
加了var 的在函數內外表現為兩個屬性,var 定義的變量是有作用域的。而函數相當於在全局作用域中創建了一個子作用域。js遇到變量或函數時會首先在當前作用域找,沒找到再往上一級作用域找。在change函數中如何沒有 定義 var mylike 則會輸出 “in the function ‘s mylike c#”,而上面在函數中定義 var mylike,當前作用域存在 mylike這個變量,而在一開始mylike還沒賦值,為undefined。
在函數中mylike是一個值,函數外mylike是一個值。而沒有var修飾的只表現出一個東西。
3.let
let是塊級作用域,在函數中定於let變量,在函數外無影響
1 let a=1; 2 console.log(a); //1 3 function change(){ 4 let a = 333; 5 console.log(a); //333 6 } 7 change(); 8 console.log(a); //1