JS的作用域,作用域链及预解析
1.js作用域
全局作用域(整个script标签内), 局部作用域(函数内部)
2.作用域链
内部函数访问外部函数的变量时,采用的是链式查找的方式进行获取的。
这种结构我们称为作用域链。
3..预解析
JS代码在浏览器中是由JS引擎进行解析执行的,分为两步,预解析和代码执行
预解析分为 变量预解析(变量提升) 和 函数预解析(函数提升)
(1)变量预解析: 把所有变量的声明提升到当前作用域的最前面,不提升赋值操作
示例:
console.log("num ");
var num = 10;
预解析后:
var num;
console.log("num");
num = 10;
//所以返回的是一个undefined
(2)函数预解析
将所有函数声明提升到当前作用域的最前面
实例:
var num = 10;
fn();
function fn(){
console.log(num);
var num = 10;
}
预解析后:
var num;
function fn(){
var num;
console.log(num);
num = 20;
}
num = 10;
fn();
// 预解析后,代码是逐行执行的,执行到 fn()后,去调用函数 fn(),在函数内执行到console.log(num);
//由于前面只声明了num而没有赋值,所以最后输出的是 undefined