:<script>
1、全局变量和局部变量
全局变量:声明在script标签下的变量或函数,全局变量在任何地方都可以访问,任何地方都可以修改
var a = 10;
function fun1() {
a++;
console.log(a); // 11
}
function fun2() {
a++; // 12
a--; // 11
console.log(a); // 11
}
fun1();
fun2();
console.log(a); // 11
function sum() {
var a = 10;
console.log(a); // 10
function s() {
console.log(a); // 10
}
s();
}
sum();
console.log(a); // a is not defined
s(); // s is not defined
2、作用域链
JavaScript 中的一种值的查找机制,当需要使用到一个变量或函数,先查找自身作用域,自身作用域没有再从父级作用中找,依次查找,一直到全局,全局还是没有,显示 is not defined。
var a = 10;
function fn() {
var a = 20;
function ab() {
var a = 30;
console.log(a); // 先找自身作用域
}
ab();
}
fn();
3、预解析
浏览器是一个集合体,可以解析html css js 图片 视频等等资源,这个里面有一块专门用于解析js,我们称为js解析器
js解析器如何工作?大致分为两步:预解析 和 逐行解读
1、预解析
找东西,找var、函数、参数,找到var之后,给它赋一个值为undefined,提到最上面,找到函数之后,将函数整体提到最上面,参数同var
如果var 和 var同名,后面的覆盖前面的,如果函数同名,后面的覆盖前面的,如果var和函数同名,则函数覆盖var
2、逐行解读
从上到下一行一行的执行,见到+ – * / % ++ — = 等等操作,就跑到前面去修改你的值,遇到读取,就跑到前面读取你的值
遇到函数调用,就又开一个新的作用域,继续执行上面两步