一、
var num=10;
fun();
function fun() {
console.log(num);//输出undefined;
var num=20;
}
说明:在JS中有一个解析器,其解析过程如下:
1、预解析(全局作用域中)
i)先找var ,function和参数;
ii)找到var ,function之后,会把var,function提前。
var num;
function fun() {
console.log(num);
var num=20;
}
num=10;
fun();
2、从上到下一行一行执行代码
针对上面的代码:先执行num=10;接着是fun()函数,然后就进入了fun()的局部作用域内,又开始了新一轮的解析过程
2.1)预解析
i)先找var ,function和参数;
ii)找到var ,function之后,会把var,function提前。
var num
console.log(num);
num=20;
2.2)从上到下一行一行执行代码;
故执行结果是undefined.
二、
var a=18;
f1();
function f1() {
var b=9;
console.log(a);
console.log(b);
var a='123';
}
解析如下:1、预解析
i)先找var ,function和参数;
ii)找到var ,function之后,会把var,function提前。
var a;
function f1() {
var b=9;
console.log(a);
console.log(b);
var a='123';
}
a=18;
f1();
2、从上到下一行一行执行代码
针对上面的代码:先执行a=18;接着是f1()函数,然后就进入了f1()的局部作用域内,又开始了新一轮的解析过程
2.1)预解析
i)先找var ,function和参数;
ii)找到var ,function之后,会把var,function提前。
var b;
var a;
b=9;
console.log(a);
console.log(b);
a='123';
2.2)从上到下一行一行执行代码;
故执行结果是//undefined,//9
三、
f1();
console.log(c);
console.log(b);
console.log(a);
function f1() {
var a=b=c=9;
console.log(a);
console.log(b);
console.log(c);
}
解析过程如下:1、预解析
i)先找var ,function和参数;
ii)找到var ,function之后,会把var,function提前。
function f1() {
var a=b=c=9;
console.log(a);
console.log(b);
console.log(c);
}
f1();
console.log(c);
console.log(b);
console.log(a);
2、从上到下一行一行执行代码
针对上面的代码:先执行f1()函数,然后就进入了f1()的局部作用域内,又开始了新一轮的解析过程.
2.1)预解析
i)先找var ,function和参数;
ii)找到var ,function之后,会把var,function提前。
var a;
a=b=c=9;
console.log(a);
console.log(b);
console.log(c);
2.2)从上到下一行一行执行代码;
故执行结果是//9,//9,//9,//9,//9,//a is not defined