作用域
變量或函數(shù)可以發(fā)生作用的區(qū)域即是作用域鸯屿。作用域的最大用途就是隔離變量或函數(shù),并控制變量或函數(shù)的生命周期,超過該區(qū)域的變量或函數(shù)就不能被訪問。
全局作用域
在整個程序生命周期內(nèi)都是有效的刑然,在任意的函數(shù)內(nèi)部都能訪問的變量或函數(shù)擁有全局作用域。
函數(shù)作用域
在某個函數(shù)內(nèi)部聲明的變量或函數(shù)擁有函數(shù)作用域暇务。它們只能被該函數(shù)的語句使用泼掠,函數(shù)外部是不可訪問的。函數(shù)在創(chuàng)建的時候垦细,變量和函數(shù)的函數(shù)作用域已經(jīng)確定下來择镇。函數(shù)的參數(shù)也屬于函數(shù)內(nèi)部的變量,因此擁有函數(shù)作用域括改。
作用域鏈
當(dāng)一個塊或函數(shù)嵌套在另一個塊或函數(shù)中時腻豌,就發(fā)生了作用域的嵌套。因此嘱能,在當(dāng)前作用域中無法搜索到某個變量時吝梅,引擎就會在外層嵌套的作用域中繼續(xù)搜索,直到搜索到該變量惹骂,或抵達最外層的作用域(也就是全局作用域)為止苏携。這樣一條有序的列表,稱為作用域鏈对粪,作用域鏈的最前端一定是當(dāng)前作用域右冻。
作用域鏈可以理解為下面這種數(shù)據(jù)格式:
{
Scope: [
{ //當(dāng)前作用域
變量,
函數(shù)名
},
{ //下個作用域
變量,
函數(shù)名
},
{ //下下個作用域
變量,
函數(shù)名
},
...
{ //全局作用域
變量,
函數(shù)名
},
]
}