javascript代码是有上之下依次执行的,但是在执行前,先要进行域解析,之后才执行代码
内容:
1、变量提升:把变量的声明
提升到当前作用域的最上面,不包括变量的赋值
2、函数提升:把函数的声明
提升到当前作用域的最上面,不包括函数的调用
3、在域解析中,如果函数名和变量名相同,此时则函数优先
(不理解看案例2
)
案例:
案例1、
var a = 25;
function abc() {
console.log(a);
var a = 10;
}
abc();
案例1-->域解析
var a; //变量提升
function abc() { //函数提升
var a;//变量提升(局部变量)
console.log(a);//这里调用的a是局部变量的a,由于a的声明虽然被提升了,但是还没有赋值,所以这里输出undefined
a = 10; //变量的赋值位置不变。
}
a = 25;//变量的赋值位置不变。
abc();//函数调用的位置不变。
打印结果:
undefined
案例2
console.log(a);
function a() {
console.log('aaaa');
}
var a = 1;
console.log(a);
案例2--->域解析
function a() { //函数提升
console.log('aaaa');
}
var a; //变量提升
console.log(a); 因为函数名和变量名相同,函数优先,所以这里输出的是函数
a = 1; //这里重新将a赋值为1
console.log(a); //这里打印的值为1
打印结果:
ƒ a() { //函数提升
console.log('aaaa');
}
1
网友评论