全局变量是在整个程序范围内都可以访问的变量。当在一个函数内部使用全局变量时,如果没有明确声明,那么该函数会默认使用其外部定义的全局变量。但如果在函数内部对全局变量进行了重新赋值,那么这个赋值操作只会影响函数内部的局部变量,而不会改变全局变量的值。
当你更新了一个全局变量,但发现这个更新并没有传递给某个函数内部引用的同名变量时,可能是因为该函数内部存在一个同名的局部变量。
函数内部如果使用了 var
、let
或 const
关键字重新声明了同名的变量,那么这个变量就会变成局部变量,而不是引用全局变量。因此,即使全局变量被更新,函数内部的局部变量也不会受到影响。
var
、let
或 const
重新声明全局变量。let globalVar = 'initial value';
function testFunction() {
// 不要这样做:let globalVar = 'local value';
console.log(globalVar); // 这里会输出 'initial value' 或之后更新的全局变量值
}
globalVar = 'updated value';
testFunction(); // 输出 'updated value'
this
关键字(在对象方法中):
如果你在对象的方法中使用全局变量,并且希望方法能够访问到最新的全局变量值,可以使用 this
关键字。let globalVar = 'initial value';
const obj = {
method: function() {
console.log(this.globalVar);
}
};
obj.method(); // 输出 'initial value'
globalVar = 'updated value';
obj.method = obj.method.bind({ globalVar: globalVar });
obj.method(); // 输出 'updated value'
let globalVar = 'initial value';
function createFunction() {
return function() {
console.log(globalVar);
};
}
const myFunction = createFunction();
myFunction(); // 输出 'initial value'
globalVar = 'updated value';
myFunction(); // 输出 'updated value'
这种情况常发生在模块化编程中,当多个函数或模块需要共享数据时。正确地管理全局变量和局部变量的使用可以避免潜在的bug。
确保在编写代码时,理解变量的作用域和生命周期,这样可以避免很多与全局变量相关的问题。
领取专属 10元无门槛券
手把手带您无忧上云