作用域,作用域鏈和預解析 變數 >局部變數和全局變數, 作用域: 就是變數的使用範圍 局部作用域和全局作用域 js中沒有塊級作用域 一對括弧中定義的變數,這個變數可以在大括弧外面使用 函數中定義的變數是局部變數 while (true) { var num = 10; break; } consol ...
作用域,作用域鏈和預解析
- 變數---->局部變數和全局變數,
- 作用域: 就是變數的使用範圍
- 局部作用域和全局作用域
- 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("小楊好帥哦"); };