跳至主要內容

作用域

wzCoding大约 2 分钟JavaScript作用域

作用域

变量的作用域 指的是变量在程序中可以被访问和使用的范围。在 JavaScript 或其他编程语言中,变量通常有全局作用域和局部作用域之分。全局变量可以在整个程序中被访问和使用,而局部变量只能在定义它的代码块或函数内部被访问和使用

全局变量

全局变量 是在程序的整个生命周期内都可以访问的变量。它们通常在程序的顶部定义,并且可以在程序的任何位置使用。在网页中,全局变量是全局对象 window 的属性,可以通过 window.xxx 来设置和访问全局变量

全局变量的作用域是整个程序,这意味着它们可以在程序的任何函数或代码块中访问和修改。全局变量通常用于存储程序运行时需要共享的数据,例如配置信息或应用程序状态。然而,过度使用全局变量可能会导致代码难以维护和调试,因此建议谨慎使用全局变量

var x = 1
console.log(x) //输出 1
console.log(window.x) //输出 1
function foo(){
   n = 100;
}
console.log(n);  //100
ℹ️提示

在函数内部定义变量时,如果没有使用关键字来声明(varletconst),那么此时定义的变量就是全局变量,可以在全局环境中访问,因此定义变量时要特别注意

局部变量

局部变量 是指在函数内部声明的变量。它们只能在函数内部访问。局部变量仅作用在局部区域中,从定义开始到大括号 {} 或者 return 结束。需要注意的是,在函数体内声明局部变量时,如果不使用 var 关键字,则将声明全局变量

var str1 = "hello1"; //定义一个全局变量
function foo() {
    var str2 = "hello2"; //定义一个局部变量
    str3 = "hello3"; //定义一个全局变量
}

变量提升

变量提升 是指在 JavaScript 中,变量和函数声明会在代码执行之前被移动到它们所在作用域的顶部。这意味着你可以在声明变量或函数之前使用它们。这种行为被称为“提升”,因为变量和函数声明好像被“提升”到了代码的顶部

需要注意的是,只有声明本身会被提升,而初始化赋值不会。在下面的例子中,变量 x 的值在第一行代码执行时仍然是 undefined,因为初始化赋值 x = 5 还没有执行

console.log(x) // 输出 undefined
var x = 5

函数声明也会被提升,这意味着你可以在声明函数之前调用它。例如:

foo()   // 输出 "Hello, world!"
function foo() {
  console.log("Hello, world!")
}