JavaScript之作用域、預解析面試題
阿新 • • 發佈:2020-09-18
作用域經典面試題
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