js看似有」塊級作用域「其實它沒有,取而代之的是「函式作用域」。
在乙個**塊(一對花括號內)定義的變數在**塊外部是不可見的,且在**塊執行結束後被釋放掉。
定義在該函式中的引數和變數在函式外部不可見(例子1),而乙個函式內部任何位置定義的變數,在該函式內部任何地方都可見(例子2)。
解釋二:也就是說,變數不僅在宣告它們的函式體內有定義,還在這個函式體巢狀的任意函式體內都有定義。(例子1裡的d)
例子1
var foo=function();
document.writeln('3.foo內的a='+a+'b='+b+'
');//c無定義
bar();
document.writeln('4.foo內的a='+a+'b='+b+'
');//c無定義
}foo();
//執行結果
3.foo內的a=3 b=5
1.bar內的a=3 b=7 c=11 d=2
2.bar內的a=21 b=7 c=11
4.foo內的a=21 b=5
例子2:
var o={};
function test(o)
console.log(k); //k已經定義了,輸出2
}console.log(j); //j已經定義了,且已初始化為1
console.log("我是迴圈裡的k="+k); //我是迴圈裡的k=2
}
變數在宣告之前就已經可用。
例子:
var scope="global";
function f()
也就是:將變數的宣告「提前」到函式頂部,同時變數初始化留在原來的位置。
function f(){
var scope;
console.log(scope);
var scope="local";
console.log(scope);//輸出 local
JS作用域和作用域鏈
什麼是js作用域?js作用域也就是js識別變數的範圍 1 全域性作用域 2 區域性作用域 3 e6的塊級作用域 全域性作用域 也就是定義在window下的變數範圍,在任何地方都可以訪問 區域性作用域 是只在函式內部定義的變數範圍 塊級作用域 簡單來說就是用let和const在任意的 塊中定義的變數都...
函式作用域和作用域鏈
所謂作用域就是 變數在宣告它們的函式體以及這個函式體巢狀的任意函式體內都是有定義的。function scope while 1 function console.log foo,global a,i m if b,i m while c c is not defined scope 但是,在js中...
JS作用鏈和作用域
js作用域也就是js識別變數的範圍,作用域鏈也就是js查詢變數的順序 先說作用域,js作用域主要包括全域性作用域 區域性作用域和es6的塊級作用域 全域性作用域 也就是定義在window下的變數範圍,在任何地方都可以訪問,區域性作用域 是只在函式內部定義的變數範圍 塊級作用域 簡單來說用let和co...