作用域,作用域链和预解析
- 变量---->局部变量和全局变量,
- 作用域: 就是变量的使用范围
- 局部作用域和全局作用域
- js中没有块级作用域---一对括号中定义的变量,这个变量可以在大括号外面使用
- 函数中定义的变量是局部变量
while (true) { var num = 10; break; } console.log(num); //10
{ var num2 = 100; } console.log(num2); //100
if (true) { var num3 = 1000; } console.log(num3); //1000
function f1() { //局部变量 var num = 10; } console.log(num); //underfined 局部变量,外面访问不到
作用域链: 变量的使用, 从里向外, 层层的搜索, 搜索到了就可以直接使用了
层层搜索, 搜索到0级作用域的时候, 如果还是没有找到这个变量, 结果就是报错
var num = 10; //作用域链 级别:0 var num2 = 20; var str = "abc" function f1() { var num2 = 20; function f2() { var num3 = 30; console.log(num); } f2(); } f1(); //10
预解析: 就是在浏览器解析代码之前, 把变量的声明和函数的声明提前(提升)到该作用域的最上面
变量提前,值没有提前
var =num
console.log(num);
num=10;
// 变量的提升 console.log(num); var num = 100; //undefinded
//函数的声明被提前了 f1(); function f1() { console.log("这个函数,执行了"); }
报错
f2() var f2 = function () { console.log("小杨好帅哦"); };