变量和函数声明提升

变量和函数声明提升

因为js是一门弱类型语言,在学习js时,总是有些情况让我们出乎意料。特别是变量声明提升和函数声明提升让人头疼!

例如 变量声明作用域提升

例一

console.log(a); //undefined  不会报错
var a = 5;  

//等价于实际格式为
var a;
console.log(a);// undefined
a = 5;

按照我们的逻辑,应该是先执行console.log(a)先,出现报错,但是在所有代码执行之前,js解释器会将js中所有的var声明的变量提升,所以只定义了a,却没有赋值。

例二

function b() {
  a = 10; //如果在函数中定义变量没有加var,该变量为全局变量  如果为
  																		var a = 10 a 则为局部变量
  return;
}
var a = 1;
b();
console.log(a);//10

//等价于实际格式为
var a = 1;
var a = 10;
var b = function(){
	return;
}
console.log(a);

函数作用域提升

例如

var a = 1;      
function b() {
  a = 10;   //函数声明提升优先级比变量声明提升优先级高
  return;
  //a函数声明,提前变量a,将a认为是函数b作用域的变量,具有局部效果
  function a(){}
} 
b(); 
console.log(a); // 1

//等价于实际格式
var b;
var a = 1;
b = function (){
	var a ;
	a = 10;
	return;
	a = function a(){}
}
b();
console.log(a)

按照刚刚所学的变量声明作用域提升,在函数b中,a = 10 应该被提升为全局作用域变成全局变量,但是函数作用域提升优先级比变量作用域优先级较高,所以在函数的开始就声明var a;也就促使 a = 10 不能提升为全局变量

学习有些浅薄,若文章有什么错误和不足之处请大家指出!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值