上节学到函数的操作,这节我们将介绍JS简单的概念。
在 JavaScript 中,全局变量是在全局作用域中声明的变量,即在任何函数之外声明的变量。全局变量在整个脚本执行期间都存在,可以被任何函数访问和修改。
全局变量的声明有两种方式:
1. 使用 var 关键字声明全局变量:
var globalVar = "全局变量www.dotcpp.com"; function myFunction() { console.log(globalVar); // 可以在函数中访问全局变量 } console.log(globalVar); // 可以在函数外部访问全局变量
2. 直接声明全局变量(不使用关键字):
globalVar = "全局变量www.dotcpp.com"; function myFunction() { console.log(globalVar); // 可以在函数中访问全局变量 } console.log(globalVar); // 可以在函数外部访问全局变量
需要注意的是,如果在函数内部没有使用 var、let 或const 关键字声明一个变量,直接对该变量赋值,那么该变量将成为一个全局变量。但是,为了避免代码中出现意外的全局变量,建议始终使用 var、let 或 const来显式声明变量。
全局变量具有全局范围,所以可以在脚本的任何地方访问它们。但是,滥用全局变量可能导致代码的可维护性和可重用性下降,因此应该谨慎使用全局变量,尽可能将变量的作用域限制在需要使用的范围内。
局部变量是在JavaScript函数内部声明的变量,其作用域仅限于函数内部。这意味着局部变量在函数外部是不可访问的。声明局部变量的主要目的是在函数内部存储和处理临时数据,它们在函数执行完毕后会被销毁。
在JavaScript中,可以使用关键字 var、let 或 const 来声明局部变量。这些关键字具有不同的行为和作用范围。
使用 var 关键字声明的变量是函数作用域变量,它们在整个函数内部都是可见的。这意味着无论在函数内的哪个位置声明变量,它们在整个函数内都可以被访问。
例如:
function myFunction() { var localVar = "局部变量www.dotcpp.com"; console.log(localVar); } myFunction(); // 输出:局部变量 console.log(localVar); // 报错:localVar is not defined
另外,使用 let 或 const 关键字声明的变量是块级作用域变量,其作用范围仅限于包含它们的代码块(如函数、循环、条件语句等)。这意味着它们在声明的代码块之外是不可见的。
function myFunction() { if (true) { let localVar = "局部变量www.dotcpp.com"; console.log(localVar); // 输出:局部变量 } console.log(localVar); // 报错:localVar is not defined } myFunction();
总结起来,局部变量是在函数内部声明的变量,其作用范围仅限于函数内部,可以使用 var、let 或 const 关键字来声明。它们在函数执行完毕或代码块结束后会被销毁。
在 JavaScript 中,向未声明的变量分配值会创建一个全局变量。这是因为 JavaScript 具有隐式的全局变量声明机制。
当你给一个变量赋值时,JavaScript 首先会查找当前作用域内是否已经存在该变量的声明。
如果存在,则将新的值赋给该变量;
如果不存在,则 JavaScript 会尝试在作用域链上层查找该变量的声明。
如果在全局作用域中仍然找不到该变量的声明,JavaScript 将会将其视为全局变量,并在全局作用域中创建该变量。
例如:
function myFunction() { localVar = "全局变量www.dotcpp.com"; // 未声明的变量赋值 console.log(localVar); // 输出:全局变量www.dotcpp.com } myFunction(); console.log(localVar); // 输出:全局变量www.dotcpp.com
在上面的例子中,变量 localVar 在 myFunction() 函数内部被赋值,由于该变量没有通过 var、let 或 const 声明,JavaScript 将其视为全局变量。因此,在函数外部也可以访问和使用该变量。
非严格模式下给未声明变量赋值创建的全局变量,是全局对象的可配置属性,可以删除。
为了避免意外创建全局变量和潜在的命名冲突,建议始终使用 var、let 或 const 显式地声明变量,并在合适的作用域内使用它们。这样可以提高代码的可读性、可维护性和健壮性。
本文固定URL:https://www.dotcpp.com/course/1274