变量的作用域是程序在其中定义的区域。
JavaScript变量只有两个作用域:
局部作用域
全局作用域
作用域确定变量的可访问性(可见性)。
在函数中声明的变量具有LOCAL(局部)作用域,这意味着无法从该函数外部调用或操作它们。
// 这里的代码不能使用cityName function myFunc() { var cityName = "New Delhi"; // 这里的代码可以使用cityName } // 这里的代码不能使用cityName测试看看‹/›
局部变量具有函数作用域,只能从函数内部访问它们。
由于局部变量只能在其函数内部识别,因此具有相同名称的变量可以在不同的函数中使用。
函数启动时创建局部变量,函数完成时将局部变量删除。
在函数外部的程序中声明的变量具有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变量。
JavaScript具有三个不同的关键字来声明变量,这为语言增加了一层复杂性。
两者之间的差异基于范围,提升和重新分配。
关键词 | 范围 | 提升 | 可以重新分配 | 可以重新声明 |
---|---|---|---|---|
var | 函数作用域 | 是 | 是 | 是 |
let | 块作用域 | 否 | 是 | 否 |
const | 块作用域 | 否 | 否 | 否 |
用var关键字声明的变量不能具有块作用域。
{}可以从块外部访问在块内部声明的变量:
{ var num = 50; } // num 能在这里使用
用let关键字声明的变量可以具有“块作用域”。
{}不能从块外部访问在块内部声明的变量:
{ let num = 50; } // num不能在这里使用
{ const num = 50; } // num不能在这里使用
常量的值不能通过重新分配而更改,也不能重新声明。
JavaScript变量的生命周期从声明开始。
函数完成后,将删除局部变量。
当您关闭浏览器窗口时,全局变量将被删除,但对于加载到同一窗口中的新页面仍然可用。