鍍金池/ 問答/HTML/ 求助各位 JS函數(shù)顯示問題

求助各位 JS函數(shù)顯示問題

var A = function(num) {
     return num++;
}

var num = 2;
var b = A(num);
console.log(b);

var A = function(num) {
    return (num + 2);
}

這個(gè)函數(shù)很簡單 答案應(yīng)該是4,但是在我的瀏覽器上顯示的卻是2 ;
無論是chrome還是ie還是edge
而且在node上顯示的也是2;
在ubantu上顯示正常 答案是4
如果把實(shí)參那里放到兩個(gè)函數(shù)后面 結(jié)果顯示的就是4
求助各位大佬
這是為什么啊

回答
編輯回答
枕頭人

嚴(yán)格意義上來說,javascript沒有多線程的概念,所有的程序都是單線程依次執(zhí)行的。
你可以順序不要變,先讓頁面加載完成后再輸出一下,加一個(gè)定時(shí)器,一看就明白了。
var num = 2;
var b;
setTimeout(function(){

 b = A(num);

},900)

setTimeout(function(){

console.log(b); //輸出:4

},1000)

var A = function(nums) {

return (nums + 2);

}

2018年4月13日 20:22
編輯回答
心癌

這個(gè)里面有兩個(gè)知識點(diǎn)。 return num++; 和 return ++ num 返回的結(jié)果是不一樣的,前者是先返回結(jié)果再加1,后者是先加1,再把加1后的結(jié)果返回。
第二是js的變量提升問題。只有直接定義的函數(shù)(function ss() {})才會(huì)提升, 用變量等于這個(gè)函數(shù),這種方式不會(huì)聲明提前。
本期當(dāng)執(zhí)行A方法時(shí),此時(shí)A還是function(num) {return num++;} 。所以結(jié)果為2

2018年4月5日 06:33
編輯回答
憶當(dāng)年

順序執(zhí)行答案肯定是2啊。ubuntu上是4,你確定你用的是js或者nodejs?難道還有先編譯再運(yùn)行的js編譯器?不可能會(huì)得到4啊

2017年11月30日 01:04