1、做用域函數
域就是空間、範圍的概念,而做用域簡單來講就是變量與函數可訪問的範圍。在咱們js中做用域是靠函數來造成的,函數內的變量函數外不可訪問。spa
做用域分全局做用域和局部做用域。code
全局做用域:任何地方都能訪問到的對象擁有全局做用域;對象
主要有如下三種狀況:blog
1.函數外部定義的變量擁有全局做用域;作用域
2.未定義直接賦值的變量自動聲明爲擁有全局做用域io
3.window對象的屬性擁有全局做用域console
var n=2;
function fn(){
var a =4;
c=5;
console.log(n);//2
}
fn();
console.log(fn());//4
console.log(n);//2
console.log(a);//報錯
console.log(c);//5
局部做用域:通常只在固定的代碼片斷內可訪問到,而對於函數外部是沒法訪問的,最多見的例如函數內部function
var n=2; function fn(){ var a =4; } fn(); console.log(n);//2 console.log(a);//報錯
做用域鏈:簡單來講,就是聲明一個函數時,局部做用域一級一級向上包起來,相似鏈狀。class
當咱們執行函數時,先從函數內部找尋局部變量,若沒用則向建立函數的做用域尋找,依次向上。
var a=1; function fn1(){ var a =2; var b='22'; fn2(); function fn2(){ var a=3; fn3(); function fn3(){ var a =4; console.log(a);//4 console.log(b);//22 } } } fn1()