关于JavaScript的一些基础
程序员文章站
2024-03-17 18:46:04
...
1.浏览器的js预处理
有如下的html代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>example</title>
<script>
alert(a);
var a = 12;
function fn1() {
alert(2);
}
</script>
</head>
<body>
</body>
</html>
浏览器逐行读取文件,在读取到<script>后,“JS解析器”开始了如下执行:
1)“找到一些东西” :例如 var function 参数 ……
a = undefined
所有的变量,在正式运行代码之前,都提前赋了一个值:未定义
fn1 = function fn1(){ alert(2)};
所有的函数,在正式运行代码之前,都是整个函数块(注意格式)。
2) 逐行解读代码
解析器去第一步的“仓库”里面寻找,例如一上来alert(a),发现a未定义,就会弹出undefined。
注意:预解析的时候:同名的函数和未定义的变量,会留下函数;表达式可以修改预解析的值。
举个例子:在<script></script>中有如下代码:
var a=1;
function fn1() {
alert(a);
var a=2;
}
fn1();
alert(a);
- 第一步解析器发现script标签:进入全局作用域。首先预解析:发现 var a(未定义); function fn1(……;
- 然后逐行执行代码:fn1();此时进入另一个域:局部作用域。还是进行那个套路
- 预解析:发现var a(未定义);逐行解析代码:alert(a);//此时弹出未定义。然后var a=2;(但是不影响全局变量的a)
- 返回全局作用域后,执行alert(a);弹出1。
如果把上面的例子中的fn1中的a的var去掉,在局部域执行代码的时候,如果找不到a回去全局作用域中去找。
上一篇: PCL点云获取+拼接(2)