作用域是可访问变量的集合。
什么是作用域
如果您学过python,应该对作用域的概念已经了解,作用域就是变量生效的范围
在 JavaScript 中, 根据变量的可访问范围分为:局部作用域、全局作用域
局部作用域
JavaScript的局部作用域:
函数作用域: 作用域在函数内修改。
块级作用域: ES6中在{}
内使用关键字let
、const
关键字定义的变量在定义的{}范围内有效
函数作用域变量调用实例
<script>
function myFunction() {
var carName = "Volvo";
// 函数内可调用 carName 变量
}
// 必须先调用函数,函数内部的代码才会执行,否则没有意义
myFunction()
// 此处不能调用 carName 变量
try{
document.write(carName)
} catch(e){
document.write("发生错误:"+e)
}
</script>
执行结果:发生错误:ReferenceError: carName is not defined
因为局部变量只作用于函数内,所以不同的函数可以使用相同名称的变量。
局部变量在函数开始执行时创建,函数执行完后局部变量会自动销毁。
块级作用域实例
块级作用域由ES6标准提供
<script>
var debug = true
if (debug){
let run_status = "start debug"
}
try{
alert(run_status)
} catch(e){
document.write("发生错误:"+e)
}
</script>
执行结果:发生错误:ReferenceError: run_status is not defined
全局作用域
变量在函数外定义,以及在{}
没有使用let
、const
声明语句,即为全局变量。
全局变量: 网页中所有脚本和函数均可使用。
全局变量调用实例
<script>
var carName = " Volvo";
// 此处可调用 carName 变量
function myFunction() {
// 函数内可调用 carName 变量
document.write(carName)
}
</script>
<button onclick="myFunction()">点我</button>
如果变量在函数内没有声明(没有使用 var
关键字),该变量为全局变量。
全局变量实例2
以下实例中 carName
在函数内,由于没有使用var
声明语句,所以自动设为全局变量。
<script>
// 此处可调用 carName 变量
function myFunction() {
carName = "Volvo";
// 此处可调用 carName 变量
}
</script>
<button onclick="alert(carName)">点我</button>
HTML 中的全局变量
window
为全局域,所以所有的全局变量都属于window
对象
//此处可使用 window.carName
function myFunction() {
carName = "Volvo";
}
讨论区