"js解析器"
1)"找一些东西":var function 参数
a=...(未定义) 所有的变量,在正式运行代码之前,都提前赋了一个值:未定义
f1=function f1() { alert(2); } 所有函数在正式运行代码之前,都是整个函数块
js的预解析: 遇到重名的:只留一个. 变量和函数重名了,就只留下函数
2)逐行解读代码:
表达式:=+-*/%++--! 参数......
表达式可以修改预解析的值!
script:全局变量、全局函数
函数(从里到外) 函数调用(局部)与js解析步骤相同
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script>
var a = 1;
function fn1() { //局部范围
alert(a);//未定义 undefined
var a = 2;
}
fn1();
alert(a);//1 全局范围
var a = 1;
function fn1() { //局部里面没东西,返回到父级
alert(a);//1
a = 2;
}
fn1();
alert(a);//2
var a = 1;
function fn1(a) {
alert(a);// undefined
a = 2;
}
fn1();
alert(a);//1
var a = 1;
function fn1(a) { //a=>var a=1
alert(a);// 1
a = 2;
}
fn1(a);
alert(a);//1
alert(a);// function a(){alert(4);} 预解析最后为a=function a(){alert(4);}
var a = 1;//1
function a() { alert(2); }
alert(a);//1
var a = 3;
alert(a);//3
function a() { alert(4); }
alert(a);//3
a();//报错
</script>
</body>
</html>