编辑这个页面须要登录或更高权限!

JavaScript 变量作用域

变量的作用域是程序在其中定义的区域。

JavaScript变量只有两个作用域:

  • 局部作用域

  • 全局作用域

作用域确定变量的可访问性(可见性)。

JavaScript 局部变量

在函数中声明的变量具有LOCAL(局部)作用域,这意味着无法从该函数外部调用或操作它们。

// 这里的代码不能使用cityName
function myFunc() {
  var cityName = "New Delhi";
  
  // 这里的代码可以使用cityName  
}

// 这里的代码不能使用cityName
测试看看‹/›

局部变量具有函数作用域,只能从函数内部访问它们。

由于局部变量只能在其函数内部识别,因此具有相同名称的变量可以在不同的函数中使用。

函数启动时创建局部变量,函数完成时将局部变量删除。

JavaScript 全局变量

在函数外部的程序中声明的变量具有GLOBAL范围,这意味着所有脚本都可以使用它们,无论该脚本在函数内部还是外部。

// 初始化全局变量
var cityName = "New Delhi";

// 这里的代码能使用cityName

function myFunc() {  
  // 这里的代码同样也能使用cityName
}

// 这里的代码能使用cityName
测试看看‹/›

可以从JavaScript程序中的任何位置访问全局变量。

在下面的示例中,我们将创建一个GLOBAL cityName变量。函数内部是一个具有相同名称的LOCAL变量。

// 初始化全局变量
var cityName = "New Delhi";

function myFunc() {
  //初始化局部、函数范围内的变量
  var cityName = "Jaipur";
  document.writeln(cityName);
}

//输出全局变量和局部变量
document.writeln(cityName);
myFunc();
document.writeln(cityName);
测试看看‹/›

通过将它们输出到文档,我们可以看到变量的值根据作用域而有所不同,并且原始值没有更改。

自动全局变量

如果为尚未声明的变量赋值,它将自动成为GLOBAL(全局)变量。

此示例将声明全局变量cityName,即使在函数内部分配了值也是如此。

myFunc();

// 这里的代码能使用cityName 

function myFunc() {
  cityName = "New Delhi";
}
测试看看‹/›

除非有必要,否则不要轻易创建全局变量。

全局变量可以覆盖窗口变量。

任何函数,包括window对象,都可以覆盖GLOBAL变量。

var,let和const之间的区别

JavaScript具有三个不同的关键字来声明变量,这为语言增加了一层复杂性。

两者之间的差异基于范围,提升和重新分配。

关键词范围提升可以重新分配可以重新声明
var函数作用域
let块作用域
const块作用域

JavaScript 代码块作用域

var关键字声明的变量不能具有块作用域。

{}可以从块外部访问在块内部声明的变量:

  { 
  var num = 50; 
  }
  // num 能在这里使用

let关键字声明的变量可以具有“块作用域”。

{}不能从块外部访问在块内部声明的变量:

  { 
  let num = 50; 
  }
  // num不能在这里使用

声明变量with constlet涉及块作用域类似。

  { 
  const num = 50; 
  }
  // num不能在这里使用

常量的值不能通过重新分配而更改,也不能重新声明。

JavaScript变量的生命周期

JavaScript变量的生命周期从声明开始。

函数完成后,将删除局部变量。

当您关闭浏览器窗口时,全局变量将被删除,但对于加载到同一窗口中的新页面仍然可用。

JavaScript菜鸟教程
JavaScript 对象
JavaScript 函数
JS HTML DOM
JS 浏览器BOM
AJAX 菜鸟教程
JavaScript 参考手册