js中变量声明与变量提前

js中变量声明与变量提前

变量声明:通过var表明变量的类型与名字,但并未赋值,如 var a;
变量初始化:即为a赋值,如 a=1;
使用变量步骤:a.声明–>b.赋值–>3.调用

使用方法

   // 方式一:声明和赋值不分离
   var str = "声明和赋值不分离";
    console.log(str); //结果:声明和赋值不分离
    // 方式二:声明和赋值分离
    var str2;
    str2 = "声明和赋值分离";
   console.log(str2); //结果:声明和赋值分离

注意:在同一作用域中,变量的名字只能使用一次(不能重复声明同一个变量),但可以为同一个变量赋值,后面赋的值会覆盖前面的,如;

	//变量声明并初始化
   var num = 1;
   console.log(num); //结果:1
    // 同一变量重新赋值,后面的值会覆盖前面的
    num = 3;
    console.log(num); //结果:3

变量声明提前

变量声明提前,仅仅是将声明提前了,但未赋值,举个例子:

console.log(a);
var a=1;

输出的结果是undefined,原因是变量声明提前,可以将代码理解为:

var a;//只声明了变量未赋值
console.log(a);//结果为undefined;
a=1;

再来看个例子

var a=1;
console.log(a);//结果为1
function b(){
	console.log(a);//结果为undefined;
	var a=2;
	console.log(a);//结果为2;
}
b();

为什么第二个a的结果是undefined?原因也是变量声明提前,代码相当于:

var a=1;
console.log(a);//结果为1
function b(){
	var a;
	console.log(a);//结果为undefined;
	a=2;
	console.log(a);//结果为2;
}
b();

但如果将var a=2删掉,console.log(a)会从函数内部往上一层层找,输出的结果就是1,此时的a是全局变量;
再来看一个例子:

var a=1;
function b(){
	a=10;
	return;
}
b();
console.log(a);//结果为10;
///////////////////////////
var a=1;
function b(){
	a=10;
	return;
	function a(){}
}
b();
console.log(a);//结果为1

第一个代码结果为10很好理解,但第二个为什么是1呢?因为里面写了个function a函数声明会提前,相当于在局部又声明了一个a就影响不到全局的a;看代码:

var a=1;
   function b(){
       var a=function (){};
       a=10;
       return;
   }
   b();
   console.log(a);

函数外面的a访问不到在函数中声明的变量,这就是闭包;

猜你喜欢

转载自blog.csdn.net/weixin_43735593/article/details/84243477