上节我们学习了函数的操作,本节将介绍 JavaScript 中变量的基础概念。
全局变量:
全局变量是在全局作用域中声明的变量,即在任何函数之外声明的变量。全局变量在整个脚本执行期间都存在,可以被任何函数访问和修改。
全局变量的声明方式
1. 使用关键字声明(推荐)
// 在全局作用域使用关键字声明
let strLet = "Dotcpp";
var strVar = "Dotcpp";
const strConst = "Dotcpp";
function myFunction() {
console.log(strLet); // 可以在函数中访问全局变量
}
console.log(strLet); // 可以在函数外部访问全局变量2. 隐式全局变量(不推荐)
// 非严格模式下,给未声明变量赋值会创建全局变量
function myFunction() {
str = "Dotcpp"; // 隐式创建全局变量
}
myFunction();
console.log(str); // 输出:"Dotcpp"关于严格模式:使用严格模式可以避免隐式全局变量的产生。(严格模式一般将字符串‘use strict’放在JS代码首行位置,其他地方无效)
'use strict';
function myFunction() {
str = "Dotcpp"; // ReferenceError: str is not defined
}
myFunction();所以,为了代码的可维护性和健壮性,建议始终使用关键字声明变量,避免使用隐式全局变量。
局部变量:
局部变量是在函数内部声明的变量,其作用域仅限于函数内部。局部变量在函数外部是不可访问的,主要用于存储和处理临时数据。
函数作用域(var)
使用 var 声明的变量是函数作用域:
function myFunction() {
var localVar = "Dotcpp";
if (true) {
var localVar = "Changed"; // 同一个变量
console.log(localVar); // 输出:"Changed"
}
console.log(localVar); // 输出:"Changed"(在整个函数内可见)
}
myFunction();
// console.log(localVar); // 报错:localVar is not defined块级作用域(let/const)
使用 let 或 const 声明的变量是块级作用域:
function myFunction() {
if (true) {
let localLet = "Dotcpp";
const localConst = "Hello";
console.log(localLet); // 输出:"Dotcpp"
}
// console.log(localLet); // 报错:localLet is not defined
// console.log(localConst); // 报错:localConst is not defined
}
myFunction();不同关键字的作用域对比
function scopeComparison() {
// var - 函数作用域
if (true) {
var varVariable = "var";
let letVariable = "let";
}
console.log(varVariable); // "var"(可访问)
// console.log(letVariable); // 报错(不可访问)
}下面我们通过一张表格进行全局变量和局部变量的分类:
| 特性 | 全局变量 | 局部变量 |
|---|---|---|
| 声明位置 | 函数外部 | 函数内部 |
| 作用域 | 整个程序 | 仅限于函数/块内部 |
| 生命周期 | 页面关闭前一直存在 | 函数执行结束后销毁 |
| 访问性 | 任何地方都可访问 | 仅在声明的作用域内可访问 |
总结:掌握JS的基本概念,知道变量的作用域和生命周期,能够让我们更安全、更有条理地进行JS编码,提高代码质量。
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程