作用域 4个月前

编程语言
991
作用域

1. JavaScript 作用域

作用域是可访问变量的集合 在 JavaScript 中, 对象和函数同样也是变量。

在 JavaScript 中, 作用域为可访问变量,对象,函数的集合。

JavaScript 函数作用域: 作用域在函数内修改。

JavaScript 局部作用域 变量在函数内声明,变量为局部变量,具有局部作用域。 局部变量:只能在函数内部访问。

// 此处不能调用 scopes 变量(出了作用域)
function myFunction() {
    var scopes = "infunction";
    // 函数内可调用 scopes 变量
}

因为局部变量只作用于函数内,所以不同的函数可以使用相同名称的变量。 局部变量在函数开始执行时创建,函数执行完后局部变量会自动销毁。

如果我们想要得到一个变量在任何处(文件内)都可以使用那么就需要了解全局变量 JavaScript 全局变量 : 变量在函数外定义,即为全局变量。 全局变量有全局作用域: 网页中所有脚本和函数均可使用。

var scopes = " not in function";
// 此处可调用 scopes 变量
function myFunction() {
    // 函数内可调用 scopes 变量
}

如果变量在函数内没有声明(没有使用 var 关键字),该变量为全局变量。

以下实例中 carName 在函数内,但是为全局变量。

// 此处可调用 scopes 变量
function myFunction() {
    scopes = "infunction";
    // 此处可调用 scopes 变量
}

2. JavaScript 变量生命周期

JavaScript 变量生命周期在它声明时初始化(生命周期开始)

  • 局部变量 在函数执行完毕后销毁(生命周期结束)
  • 全局变量在页面关闭后销毁(生命周期结束)
  • 函数参数只在函数内起作用,是局部变量
  • HTML 中的全局变量 全局变量是 window 对象,所以 window 对象可以调用函数内的未声明(未加 var)的局部变量。

ps:所有数据变量都属于 window 对象。

//此处可使用 window.scopes
function myFunction() {
    sccopes = "infuntion";
}

需要注意以下几点

  • 全局变量,或者函数,可以覆盖 window 对象的变量或者函数。 局部变量,包括 window 对象可以覆盖全局变量和函数。
  • 函数内部的局部变量通常不可直接被外部作用域访问 但如下方式可以将函数内的局部变量暴露给外部作用域
  1. 全局对象:在函数内部,可以通过将局部变量赋值给 window 对象的属性来使其成为全局可访问。 例如,window.a = a; 语句,可以在函数外部通过 window.a 访问到这个局部变量的值。
  2. 定义全局变量:在函数内部不使用 var、let 或 const 等关键字声明变量时,该变量会被视为全局变量,从而可以在函数外部访问。
  3. 但这种做法通常不推荐,因为它可能导致副作用而且难以维护
  4. 返回值:可以通过在函数内部使用 return 语句返回局部变量的值,然后在函数外部接收这个返回值。 以此虽然局部变量本身不被暴露,但其值可以通过函数传递到外部
  5. 闭包:JavaScript 中的闭包特性允许内部函数访问外部函数的局部变量。即使外部函数执行完毕后,其局部变量仍然可以被内部函数引用。
  6. 属性和方法:定义在全局作用域中的变量和函数都会变成 window 对象的属性和方法,因此可以在调用时省略 window,直接使用变量名或函数名
image
EchoEcho官方
无论前方如何,请不要后悔与我相遇。
1377
发布数
439
关注者
2222553
累计阅读

热门教程文档

Docker
62小节
Vue
25小节
Rust
84小节
QT
33小节
C#
57小节