JavaScript 函数作用域详解-<更新中>

69 阅读3分钟

JavaScript 函数作用域

在 JavaScript 中有两种作用域类型:

  • 局部作用域
  • 全局作用域
作用域
变量使用使用区间的,变量不是说声明之后在哪里都可以用,他有个使用的范围, 我们把这个范围叫做作用域JavaScript 拥有函数作用域:每个函数创建一个新的作用域。作用域决定了这些变量的可访问性(可见性)。函数内部定义的变量从函数外部是不可访问的(不可见的)。
1.全局作用域JS给我们提供了一个叫做window的全局作用域,可以理解为整个script标签内的作用域,就是全局作用域全局变量都会挂载到window对象上
2. 局部作用域小预告:后续会学习新的作用域(块级作用域)在JS中,有且只有函数能够创建局部作用域(函数作用域),局部作用域开始和结束位置,就是函数代码段的开始和结在局部作用域(函数作用域)内声明的变量叫做局部变量局部变量不会挂载到window对象上以局部变量为荣,以全局变量为耻在 JavaScript 函数中声明的变量,会成为函数的局部变量。局部变量的作用域是局部的:只能在函数内部访问它们。
作用域链
在查找变最时,会先在当前作用域内查找,找到就用,没找到去上层查找,一直会查找到顶层作用域(全局--window)然后在查找过程中,我们把逐层向上的一层层查找 所构成的一个链条叫做作用域 链(实际是没有作用域链的,这是一个纯慨念性的东西)
重点:
作用域链只会向上查找,不会向下

局部 JavaScript 变量

在 JavaScript 函数中声明的变量,会成为函数的局部变量。

局部变量的作用域是局部的:只能在函数内部访问它们。

// 此处的代码不能使用 carName 变量

function myFunction() {

    var carName = "porsche";

    // 此处的代码能使用 carName 变量

}

由于只能在函数内部识别局部变量,因此能够在不同函数中使用同名变量。

在函数开始时会创建局部变量,在函数完成时会删除它们。

全局 JavaScript 变量

函数之外声明的变量,会成为全局变量。

全局变量的作用域是全局的:网页的所有脚本和函数都能够访问它。

var carName = " porsche";

// 此处的代码能够使用 carName 变量

function myFunction() {

    // 此处的代码也能够使用 carName 变量

}

JavaScript 变量

在 JavaScript 中,对象和函数也是变量。

作用域决定了从代码不同部分对变量、对象和函数的可访问性。

自动全局

如果您为尚未声明的变量赋值,此变量会自动成为全局变量。

这段代码将声明一个全局变量 carName,即使在函数内进行了赋值。

myFunction();

// 此处的代码能够使用 carName 变量

function myFunction() {

    carName = "porsche";

}

严格模式

所有现代浏览器都支持以“严格模式”运行 JavaScript。

您将在本教程稍后的章节学习更多如何使用严格模式的知识。

在“严格模式”中不会自动创建全局变量

HTML 中的全局变量

通过 JavaScript,全局作用域形成了完整的 JavaScript 环境。

在 HTML 中,全局作用域是 window。所有全局变量均属于 window 对象。