欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JS高级---作用域,作用域链和预解析

程序员文章站 2022-06-04 18:37:46
作用域,作用域链和预解析 变量 >局部变量和全局变量, 作用域: 就是变量的使用范围 局部作用域和全局作用域 js中没有块级作用域 一对括号中定义的变量,这个变量可以在大括号外面使用 函数中定义的变量是局部变量 while (true) { var num = 10; break; } consol ......

作用域,作用域链和预解析

   
  •  变量---->局部变量和全局变量,
  •  作用域: 就是变量的使用范围
 
  1.     局部作用域和全局作用域
  2.     js中没有块级作用域---一对括号中定义的变量,这个变量可以在大括号外面使用
  3.     函数中定义的变量是局部变量
 
    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("小杨好帅哦");
    };