JS中声明变量的三种方式 const var let

在JavaScript中有三种声明变量的方式:const  var let。

  • const:用于声明常量。注意:定义的变量的时候,必须同时初始化,且其值之后不可以修改。 
    		const PI=3.14;
    		// const a;//报错。没有赋初值。
    		console.log('const PI:',PI);//输出
    		// PI = 3.1415926;//报错。不能赋值给一个常量。


  • var:最常用的声明变量关键字。 定义的变量的时候,若没有初始化,不报错,会输出undefined。其值之后可以修改。
    var可以用来声明全局变量,也可以声明局部变量,依据它们声明的位置:

  1.  全局变量:在函数外定义的变量;(注意:若没有使用关键字声明的变量,默认为全局变量。)作用域是整个代码文件。
  2.  局部变量:在函数内定义的变量。作用域是当前的函数内部。

                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);//输出333

  • let块级作用域 。在块级{}里面用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

你可能感兴趣的:(JavaScript)