JavaScript变量声明var,let.const及区别浅析
var声明变量的作用域限制在其声明位置的上下文中
varx=0;//x是全局变量,并且赋值为0。 console.log(typeofz);//undefined,因为z还不存在。 functiona(){//当a被调用时, vary=2;//y被声明成函数a作用域的变量,然后赋值成2。 console.log(x,y);//02 functionb(){//当b被调用时, x=3;//全局变量x被赋值为3,不生成全局变量。 y=4;//已存在的外部函数的y变量被赋值为4,不生成新的全局变量。 z=5;//创建新的全局变量z,并且给z赋值为5。 }//(在严格模式下(strictmode)抛出ReferenceError) b();//调用b时创建了全局变量z。 console.log(x,y,z);//345 } a();//调用a时同时调用了b。 console.log(x,z);//35 console.log(typeofy);//undefined,因为y是a函数的本地(local)变量。
let声明的变量只在其声明的块或子块中可用,var的作用域是整个封闭函数
functionvarTest(){ varx=1; if(true){ varx=2;//同样的变量! console.log(x);//2 } console.log(x);//2 } functionletTest(){ letx=1; if(true){ letx=2;//不同的变量 console.log(x);//2 } console.log(x);//1 }
在ECMAScript2015中,let绑定不受变量提升的约束,这意味着let声明不会被提升到当前执行上下文的顶部。
在块中的变量初始化之前,引用它将会导致ReferenceError(而使用var声明变量则恰恰相反,该变量的值是undefined)
当在块中使用时,let将变量的作用域限制为该块。注意var的作用域在它被声明的函数内的区
vara=1; varb=2; if(a===1){ vara=11;//thescopeisglobal letb=22;//thescopeisinsidetheif-block console.log(a);//11 console.log(b);//22 } console.log(a);//11 console.log(b);//2
const常量必须在声明的同时指定它的值.
const声明创建一个值的只读引用。但这并不意味着它所持有的值是不可变的(如引用内容是对象),只是变量标识符不能重新分配一个常量不能和它所在作用域内的其他变量或函数拥有相同的名称
//注意:常量在声明的时候可以使用大小写,但通常情况下全部用大写字母。 //定义常量MY_FAV并赋值7 constMY_FAV=7; //报错 MY_FAV=20; //输出7 console.log("myfavoritenumberis:"+MY_FAV); //尝试重新声明会报错 constMY_FAV=20; //MY_FAV保留给上面的常量,这个操作会失败 varMY_FAV=20; //也会报错 letMY_FAV=20; //注意块范围的性质很重要 if(MY_FAV===7){ //没问题,并且创建了一个块作用域变量MY_FAV //(worksequallywellwithlettodeclareablockscopednonconstvariable) letMY_FAV=20; //MY_FAV现在为20 console.log('myfavoritenumberis'+MY_FAV); //这被提升到全局上下文并引发错误 varMY_FAV=20; } //MY_FAV依旧为7 console.log("myfavoritenumberis"+MY_FAV); //常量要求一个初始值 constFOO;//SyntaxError:missing=inconstdeclaration //常量可以定义成对象 constMY_OBJECT={"key":"value"}; //重写对象和上面一样会失败 MY_OBJECT={"OTHER_KEY":"value"}; //对象属性并不在保护的范围内,下面这个声明会成功执行 MY_OBJECT.key="otherValue"; //也可以用来定义数组 constMY_ARRAY=[]; //It'spossibletopushitemsintothearray //可以向数组填充数据 MY_ARRAY.push('A');//["A"] //但是,将一个新数组赋给变量会引发错误 MY_ARRAY=['B']
下面介绍下在javascript中有三种声明变量的方式:var、let、const。
var声明全局变量,换句话理解就是,声明在for循环中的变量,跳出for循环同样可以使用。
for(vari=0;i<=1000;i++){ varsum=0; sum+=i; } alert(sum);
声明在for循环内部的sum,跳出for循环一样可以使用,不会报错正常弹出结果
let:声明块级变量,即局部变量。
在上面的例子中,跳出for循环,再使用sum变量就会报错,有着严格的作用域,变量只作用域当前隶属的代码块,不可重复定义同一个变量,不可在声明之前调用,必须先定义再使用,会报错,循环体中可以用let
注意:必须声明'usestrict';后才能使用let声明变量否则浏览并不能显示结果,
const:用于声明常量,也具有块级作用域,也可声明块级。
constPI=3.14;
它和let一样,也不能重复定义同一个变量,const一旦定义,无法修改。
总结
以上所述是小编给大家介绍的JavaScript变量声明var,let.const及区别浅析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!