变量的作用域指变量有效的范围, 与变量定义的位置密切相关, 作用域是从空间的角度来描述变量的, 也可以理解为变量的可见性. 在某个范围内变量是可见的, 也就是说, 变量是可用的.
JavaScript 变量作用域有两种类型: 局部作用域, 全局作用域. 按照作用域的不同, 变量可分为全局变量和局部变量.
全局作用域和全局变量
变量在函数外定义为全局变量, 全局变量有局作用域: 网页中的所有脚本和函数均可使用.
在代码中任何地方都能访问到的对象拥有全局作用域, 一般来说以下几种情形拥有全局作用域:
1, 最外层函数和在最外层函数外面定义的变量拥有全局作用域
2, 所有末定义直接赋值的变量自动声明为拥有全局作用域
3, 所有 Windows 对象的属性拥有全局作用域
一般情况下, Windows 对象的内置属性都拥有全局作用域, 例如 Windows.name,Windows.location,Windows.top 等等.
- <!DOCTYPE html>
- <HTML>
- <head>
- <meta charset="utf-8">
- </head>
- <body>
- <p>
- 全局变量在任何脚本和函数内均可访问.
- </p>
- <p id="demo">
- </p>
- <script>
- var carName = "Volvo";
- myFunction();
- function myFunction() {
- document.getElementById("demo").innerHTML = "我可以显示" + carName;
- }
- </script>
- </body>
- </HTML>
输出:
全局变量在任何脚本和函数内均可访问.
我可以显示 Volvo
局部作用域和局部变量
变量在函数内部声明为局部作用域.
和全局作用域相反, 局部作用域一般只在固定的代码片段 (例: 函数) 内部可访问到, 最常见的例如函数内部, 所有在一些地方也会看到有人把这种作用域称为函数作用域.
- <!DOCTYPE HTML>
- <HTML>
- <head>
- <meta charset="utf-8">
- </head>
- <body>
- <p>
- 局部变量在声明的函数外不可以访问.
- </p>
- <p id="demo">
- </p>
- <script>
- myFunction();
- document.getElementById("demo").innerHTML = "carName 的类型是:" + typeof carName;
- function myFunction() {
- var carName = "Volvo";
- }
- </script>
- </body>
- </HTML>
输出:
局部变量在声明的函数外不可以访问.
carName 的类型是: undefined
变量的生存周期
1, 对于全局变量来说, 其生命周期是永久的, 除非主动销毁此全局变量;
2, 对于在函数内用 var 关键字声明的局部变量来说, 当退出函数时, 这些局部变量即失去它们的价值, 它们会随着函数调用的结束而被销毁.
来源: http://www.css88.com/qa/javascript/11454.html