请稍候,加载中....

JavaScript 作用域

作用域是可访问变量的集合。

 


什么是作用域

如果您学过python,应该对作用域的概念已经了解,作用域就是变量生效的范围

在 JavaScript 中, 根据变量的可访问范围分为:局部作用域、全局作用域
 

 


局部作用域

JavaScript的局部作用域:

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

      块级作用域: ES6中在{}内使用关键字letconst关键字定义的变量在定义的{}范围内有效

函数作用域变量调用实例

<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

 


全局作用域

变量在函数外定义,以及在{}没有使用letconst声明语句,即为全局变量。

全局变量: 网页中所有脚本和函数均可使用。 

全局变量调用实例

<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";
}

Python学习手册-