1. 程式人生 > 實用技巧 >JavaScript之作用域、預解析面試題

JavaScript之作用域、預解析面試題

作用域經典面試題
 var num = 123;
    // f1函式寫好了,作用域就定下來了,也就是作用域鏈定下來了
    // f1函式作用域鏈: f1函式作用域 ==> 全域性作用域
    function f1() {
        console.log(num); // 123
    }
    function f2() {
        var num = 456;
        f1();
    }
    f2(); //列印啥?
 var num = 123
    function f1(num) {
        // 形參:理解成函式內宣告的區域性變數
// var num = 實參; 456 console.log(num) // 456 } function f2() { var num = 456; f1(num); // num實參 f1(456) } f2()

 var num = 123
    function f1(num) {
        // var num = 實參; // undefined
        console.log(num); // undefined
    }
    function f2() {
        
var num = 456; f1(); } f2()

var num = 123
    function f1() {
        console.log(num); // 123
    }
    function f2() {
        var num = 456;
        f1(num);
    }
    f2();

細節:

//1. 預解析(函式內的程式碼執行之前也要預解析) //2. 函式內的形參理解: 理解成函式內宣告的區域性變數 //3. 函式作用域在函式寫好的時候就已經確定下來了,作用域鏈就已經定下來了。
var num1 = 10;
    
var num2 = 20; function fn(num1) { // var num3; // 預解析 // var num1 = 實參; // undefined // 形參的理解 num1 = 100; // 修改的區域性num1為100; num2 = 200; // 修改的全域性num2為200; num3 = 300; // 修改的區域性num3為300; console.log(num1); // 100 console.log(num2); // 200 console.log(num3); // 300 var num3; } fn(); console.log(num1); // 10 console.log(num2); // 200 console.log(num3); // error*/

var num = 10;
    fn1();
    function fn1() {
        console.log(num); // undefined
        var num = 20;
        console.log(num); //20
    }
    console.log(num); // 10

-------------------------------------------------------------------------------------------分割線--------------------------------------------------------------------------------------------------------

預解析經典面試題
 function fn1() {
        // 函式內的程式碼在執行之前也要經過預解析
        var num; // 預解析
        console.log(num); // undefined
        num = 20;         // 修改區域性num為20
        console.log(num); // 20
    }
    var num;
 
 
    num = 10;   // 修改全域性num為10
    fn1();
    console.log(num); // 10

 var num = 10;
    fn1();
    function fn1() {
      console.log(num);  // 10
      num = 20;          // 修改全域性的num為20
      console.log(num);  // 20
    }
    console.log(num);    // 20