1. 程式人生 > >JS能力測評16:正確的函式定義

JS能力測評16:正確的函式定義

思路:

這道題是考函式宣告與函式表示式的區別,原題的寫法,是在兩個邏輯分支裡面各有一個函式宣告,但是對於函式宣告,解析器會率先讀取並且讓其在執行任何程式碼前可用,意思就是別的程式碼還沒執行呢,兩個getValue宣告已經被讀取,所以總是執行最新的那個。函式表示式,當解析器執行到它所在的程式碼行時,才會真正被解釋執行,所以兩個邏輯分支可以分別執行。

else中的語句相當於將if中的function重寫,因此無論flag為何值,返回的方法始終為重寫後的方法。將方法賦值給一個變數,方法就不會被重寫,因此才能得到正確的結果。

function functions(flag) {
    if (flag) {
     var getValue= function () { return 'a'; }
    } else {
     var getValue= function () { return 'b'; }
    }
    return getValue();
}