欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

用var,let,const声明变量作用域异同详解

程序员文章站 2022-04-05 09:36:16
var:用var声明的变量在该声明区域是可全局访问的。 let:let是ES6的新标准,用let声明的变量,只在声明该变量的块级区域可访问(区别于var的全局访问)。 以下面代...

var:用var声明的变量在该声明区域是可全局访问的。

let:let是ES6的新标准,用let声明的变量,只在声明该变量的块级区域可访问(区别于var的全局访问)。

以下面代码为例说明var与let的不同。

let num=9;var flag=10;/**块级变量声明 let*/function let_test(){ for(let i=0;i<4;i++){ var y=2; console.log("i="+i+","+"y="+y); } console.log("在函数 let_test中访问num"+","+"num="+num); console.log("for循环之外访问:y="+y); console.log("for循环之外访问:i"); console.log(i);}

前两行代码声明变量的方式都是全局变量,可在全局调用。

用let声明的变量i,属于块级变量,而用var声明的变量y属于“全局变量”(此时的全局是相对与let_test函数来说的,y是该函数中的全局变量),然后在for循环中打印i和y的值:

i=0,y=2

i=1,y=2

i=2,y=2

i=3,y=2

结果表明可正常访问,再来测试一下在for循环之外能否正常访问,在for循环打印i和y的值:

for循环之外访问:y=2

for循环之外访问:i

e:\vscode\hello\hanShu.js:35

console.log(i);

^

ReferenceError: i is not defined

结果表明,即使实在函数的"块级区域"声明的变量y也能在函数体内出该块级区域之外的地方访问,这就是var的神奇之处,一旦声明即为“全局变量”。而用i变量脱离了声明它的区域就不能访问了,let类型的变量妥妥的“局部变量”啊!

再来说说const,和Java一样,它是常量,一经赋值不可更改,而它的可访问域和let一样,不再多说。