JavaScript中沒有塊級作用域,“塊級作用域”中宣告的變數將被添加到當前的執行環境中
if(true) {
var color = "blue";
}
console.log(color); // "blue"
function test() {
if(true) {
var color = "blue"; // (當前執行環境為函式test的區域作用域,函式外部無法訪問,內部可以訪問)
}
console.log("blue"); // "blue"
function inner() {
console.log(color); // "blue"
}
inner();
}
test();
console.log(color); // ReferenceError: color is not defined
在JavaScript中,由for陳述句創建的變數,即使在for回圈執行結束后,也依舊會存在于回圈外部的執行環境中,
for(var i = 0; i < 10; i++) {
var color = "blue";
}
console.log(i); // 10
console.log(color); // "blue"
使用var宣告的變數會自動被添加到最接近的環境中,在函式內部,最接近的環境就是函式的區域環境;在with陳述句中,最接近的環境是函式環境,
如果初始化變數時沒有使用var宣告,該變數會自動被添加到全域環境,
function add(num1, num2) {
var sum = num1 + num2; // 用var宣告
return sum;
}
console.log(add(10, 20)); // 30
console.log(sum); // ReferenceError: sum is not defined
function add(num1, num2) {
sum = num1 + num2; // 沒有使用var宣告
return sum;
}
console.log(add(10, 20)); // 30
console.log(sum); // 30
如果區域環境中存在著同名識別符號,就不會使用位于父環境中的識別符號,
var color = "blue";
function getColor() {
console.log(color); // undefined (變數提升)
var color = "red";
console.log(color); // red
console.log(window.color); // blue
return color;
}
console.log('return: ', getColor()); // return: red
console.log(color); // blue
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/127982.html
標籤:JavaScript
