JavaScript变量提升

一直看到这个问题,但是也一直觉得不是什么大问题,所以一直没写。看到这个问题面试会问,那就把他学习一下。大概的就是当我们 var tag = 2 这样的去定义一个变量的时候,变量会被提升到作用域的顶部,就算在代码最后一行定义的变量,也会被提升到最前面。

先看俩个错误

Uncaught ReferenceError: a is not defined
//a 没有被定义
undefined
//a 没有实际的值

上代码,来个例子

function fo(){
	console.log(a);
	console.log(b);
	var a = 2;
}
fo()
/* 运行结果 这样就很好理解错误的意思了。
* undefined
* Uncaught ReferenceError: b is not defined
* 所以在函数 fo() 中,变量 a 已经被识别到,但是未定义值,变量 b 没被识别到
*/

出现这个结果的原因是这样的(不考虑 b 的情况,b 和变量提升无关):

function fo(){
	var a;
	console.log(a);
	a = 2;
}
//变量 a 被提升到了函数作用域的最上端,但是值未定义,所以打印出了 undefined.

再看个函数

function f(){
	a = 1;
	var a;
	console,log(a);  // 1
}
// 因为变量 a 被提升到函数作用域的最上端,所以先定义,后赋值,最后打印,所以打印出了 1 .

最后看道面试题(其他地方看到的)

console.log(v1);
var v1 = 100;
function foo() {
    console.log(v1);
    var v1 = 200;
    console.log(v1);
}
foo();
console.log(v1);
/*
* undefined
* undefined
* 200
* 100
* 实际的执行顺序:
* var v1(gobal)
* console.log(v1(gobal))   undefined
* v1(gobal) = 100 
* foo()
* var v1(foo())
* console.log(v1(foo()))   undefined
* v1(foo()) = 200
* console.log(v1(f00()))   200
* console.log(v1(gobal))   100
*/

其实这东西不难…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值