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访问不到在函数中声明的变量,这就是闭包;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值