JS变量的提升

JS变量的提升

声明提升

所有使用var声明的变量都会提升:提升到作用域一开始的位置被声明,该赋值的位置再赋值

var a = 10;
console.log(a)	//10
console.log(a)	//undefined
var a = 10;

上面的相当于将a提升到作用域最上面,而赋值还是在最后面:

var a;
console.log(a);		//undefined
a = 10;

再看下面一个例子:

function fn(){
	var a = 10;
	console.log(a)//10
}
fn()
function fn(){
	console.log(a);	//undefined
	var a = 10;
	console.log(a);	//10
}
fn()

这是因为a被声明到前面去,但是未被赋值,所以第一个是undefined,第二个是10,相当于:

function fn(){
	var a;
	console.log(a);	//undefined
	a = 10;
	console.log(a);	//10
}
fn()

函数提升

function fn(){
	console.log('hello')
}	
fn()

//或

fn()
console.log(fn)	//得到整个函数fn
function fn(){
	console.log('hello')
}

//可以用console.log()来看是否提升

console.log(fn)	//得到整个函数fn
function fn(){
	console.log('hello')
}	
fn()

当函数遇到变量时:

// fn()						//fn is not a function
	var fn = function(){
		console.log('world')
	}	
	fn()					//world

赋值式创建函数中,不存在函数提升,只有var的变量提升

再将上面的例子进行结合,那么有会发现什么?

console.log(a);	//ƒ a(){}
var a = 10;
function a(){}
console.log(a)	//10

//上面的等价于下面的,function把上面的a覆盖了

var a;
function a(){}
console.log(a);	//ƒ a(){}
a = 10;
console.log(a)	//10

再来一个问题,如果将变量与函数的位置换以下呢?还是看下面的代码说话吧

console.log(a);	//ƒ a(){}
function a(){}
var a = 10;
console.log(a)	//10

可以看出结果还是一样,其实提升并不是跟出现的顺序有关,而是使用var声明的变量会提升的更高,提升的更高并不意味权限更高,而是有可能会被覆盖

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值