騰訊js面試題1

sensus森森發表於2017-07-30

該題難度係數為:★★★

考查技術點:1). 作用域與作用域鏈  2). 變數查詢

    var x = 10;      
    function fn() {      
        console.log(x);      
    }      
    function show(f) {      
        var x = 20;      
        f();      
    }      
    show(fn);   

執行結果為:


接下來我們分析下思路:

首先我們先來了解下三個概念,

作用域:

       一塊特定的程式碼區域,全域性作用域和函式作用域,隔離變數,避免命名衝突

作用域鏈:

        由內向外的多個巢狀的作用域形成的鏈條

查詢變數:

       從當前作用域開始,沿著作用域鏈查詢(注意不是原型鏈查詢),如果找不到,就報錯

呼叫show(fn),就是把fn函式當作函式引數傳進去,即show函式變成了,

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

具體分下如圖所示:


相關文章