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 对象。