鍍金池/ 問答/HTML/ 為什么這不能是一個js函數(shù)呢?

為什么這不能是一個js函數(shù)呢?

function f3(){
    var n=9;
     n+=1;
   console.log(n);
}
var clouser=f3();
clouser();

這個函數(shù)可以打印出n的值,為什么在控制臺里會顯示Uncaught TypeError: clouser is not a function.??在學(xué)習(xí)閉包的概念,如果代碼是下面這樣的就不會報錯,我以為是要有return,但是上面這樣寫,我加了句return n,還是會報同樣的錯誤,一定要閉包才能是函數(shù)?

function f3(){
    var n=9;
    nAdd=function(){
        n=n+1;
        console.log(n);
    }
    return nAdd;
}
var clouser=f3();
clouser();
回答
編輯回答
安淺陌

跟閉包沒關(guān)系啊,你下面的那個返回的是一個函數(shù),上面的返回的n是一個值,肯定不行了。

2017年5月20日 15:58
編輯回答
耍太極
function f3(){
    var n=9;
     n+=1;
   console.log(n);
}
var clouser=f3();
clouser();

在這個例子中,函數(shù)f3沒有顯式return,根據(jù)規(guī)范,引擎會隱式返回一個undefinded,即相當(dāng)于在f3函數(shù)體最后一行加上return undefined。

return后面的表達式就是函數(shù)的返回值。而對于一個函數(shù),在后面加上一對圓括號()代表運行這個函數(shù),將返回值賦給等號左邊的變量。

因此變量clouser的值是undefined。undefined是無法運行的。

下面的例子同理,區(qū)別在于最后return的是一個函數(shù),因此clouser也是一個函數(shù),所以是可以運行的。

2017年9月14日 23:58