1. 程式人生 > 實用技巧 >js 作用域和作用域鏈

js 作用域和作用域鏈

一、作用域

  在 Javascript 中,作用域分為全域性作用域函式作用域

  全域性作用域:

    程式碼在程式的任何地方都能被訪問,window 物件的內建屬性都擁有全域性作用域。

  函式作用域:

    在固定的程式碼片段才能被訪問

  

  例子:

    

    作用域有上下級關係,上下級關係的確定就看函式是在哪個作用域下建立的。如上,fn作用域下建立了bar函式,那麼“fn作用域”就是“bar作用域”的上級。

    作用域最大的用處就是隔離變數,不同作用域下同名變數不會有衝突。

    變數取值:到建立 這個變數 的函式的作用域中取值

二、作用域鏈

  一般情況下,變數取值到建立 這個變數 的函式的作用域中取值。

  但是如果在當前作用域中沒有查到值,就會向上級作用域去查,直到查到全域性作用域,這麼一個查詢過程形成的鏈條就叫做作用域鏈。

var x = 10;

function fn(){
    console.log(x);
}

function show(f){
    var x = 20;
    (function(){
       f();    // 10
    })()  
}

show(fn);