JavaScript中的var與作用域


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM