任何編程語言都有作用域的概念驯遇,簡單來說焙畔,作用域就是變量與函數的可訪問范圍,即作用域控制著變量與函數的可見性和生命周期玻熙。
js的作用域是靠函數來形成的否彩,也就是說一個函數的變量在函數外不可以訪問。內部函數訪問外部函數的變量嗦随,采取的是鏈式查找的方法來決定取哪個值列荔,這種結構就成為作用域鏈。 就近原則(找到了就停止查找)
作用域鏈
通俗地講枚尼,當聲明一個函數時贴浙,局部作用域一級一級向上包起來,就是作用域鏈署恍。
1.當執(zhí)行函數時崎溃,總是先從函數內部找尋局部變量
2.如果內部找不到(函數的局部作用域沒有),則會向創(chuàng)建函數的作用域(聲明函數的作用域)尋找盯质,依次向上
// 示例
var a = 1;
function fn1() {
var a = 2;
console.log(a); //1
function fn2() {
console.log("--內部函數--", a); //結果為fn1函數中a的值
}
fn2();
}
fn1();