在js中,存在着预解析。
在代码执行的时候
- 函数会提升到当前作用域最前面
- var的变量会提升到函数后面
正常写法:
var num=10;
fun();
function fun(){
console.log(num);//undefined
var num=20; }
预解析里:先将变量和函数提前,如下:
var num;
function fun(){
var num;
console.log(num);//undefined
num=20;
}
num=10;
fun();
第二种
var num=10;
function dn(){
console.log(num);//undefined
var num=20;
console.log(num);//20
}
dn();
//相当于以下代码
var num;
function dn(){
var num;
console.log(num);
num =20;
console.log(num );
}
num=10;
dn();
第三种
var a =18;
ss();
function ss(){
var b=9;
console.log(a);//undefined
console.log(b);//9
var a='123';
}
//相当于以下代码
var a;
function ss(){
var b;
var a;
b=9;
console.log(a);
console.log(b);
a='123';
}
a=18;
ss();
第四种
aa();
console.log(c1);//9
console.log(b1);//9
console.log(a1);//报错
function aa(){
var a1=b1=c1=9;
console.log(a1);//9
console.log(b1);//9
console.log(c1);//9
}
//相当于
function aa(){
var a1=b1=c1=9;//相当于 var a=9;b=9,c=9
var a1;
a1=b1=c1=9;
console.log(a1);
console.log(b1);
console.log(c1)
}
aa();
console.log(c1);
console.log(b1);
console.log(a1);