变量有局部变量和全局变量
作用域:就是变量的使用范围,有局部作用域和全局作用域
JS中没有块级作用域
作用域链:变量的使用,从里到外,层层搜索,搜索到了便可使用,直到搜索到0级仍未找到,结果就是报错
eg1:
var num=10; //作用域链-----------级别:0
function f1(){
var num=20; //作用域链-----------级别:1
function f2() {
var num=30; //作用域链-----------级别:2
console.log(num);
}
f2();
}
f1();
预解析:就是在浏览器解析代码之前,把变量的声明和函数的声明都提前到作用域的最上面(注:只是把声明提前了,值并没有提前)
eg2:
//变量的提升
console.log(num);//undefined
var num=10;
//函数的声明被提前了
f1();
function f1() {
console.log("这个函数,执行了");
}