鍍金池/ 問答/HTML/ 請問js返回的值加不加括號的區(qū)別

請問js返回的值加不加括號的區(qū)別

function f1(){
    var n=999;
    function f2(){
      alert(n); 
    }
    return f2;
  }
  var result=f1();
  result(); // 999

請問這個代碼中, 為什么return f2為什么不加() , 我試了一下,加() 最后會提示result未定義而報錯。小白問一下這里面有什么講究么? 返回f2和返回f2()有啥區(qū)別。

回答
編輯回答
維他命

()是執(zhí)行。
return f2;返回f2方法
return f2();返回f2執(zhí)行結果

2018年4月2日 16:33
編輯回答
澐染

return f2 是把函數(shù)字面量返回了
加括號就是執(zhí)行了,會在賦值之前先計算出結果

你可以試試在 console 里面:

function f() {
    return 1
}

console.log(f)    // => ? f() {
                  //          return 1
                  //    }
console.log(f())  // => 1
2017年2月11日 03:31
編輯回答
哚蕾咪

return f2: f2是變量,
var f2 = function(){

// 不寫return就會默認return undefined

}

return f2(): f2函數(shù)會先被調(diào)用,由于沒有寫return ,所以會返回undefined

2018年4月11日 11:36
編輯回答
抱緊我

先回答:

  • 函數(shù)名返回的是函數(shù)體

  • 函數(shù)名加括號返回的是調(diào)用這個函數(shù)產(chǎn)生的返回值

所以當你不加括號的時候。f1返回f2的函數(shù)體就是

function f2(n){
    alert(n)
}

這個東西。
然后下面的代碼var result = f1()就相當于把這個函數(shù)的執(zhí)行結果(也就是這個函數(shù)的返回值return)給了result(即f2的函數(shù)體),這時候result是個函數(shù)名。然后在函數(shù)名后面加括號調(diào)用函數(shù)就會去執(zhí)行函數(shù),所以result()其實也就是執(zhí)行了上面那個函數(shù)里面的代碼。

如果你加了括號,f1 return的是f2(),也就是f2的返回值,因為f2函數(shù)體里面沒有寫return,所以它返回的是undefined。所以result === undefined,不是一個函數(shù)。所以對return()對它調(diào)用會報錯。

你可以理解為加括號就是把函數(shù)名代表的函數(shù)體執(zhí)行一遍。

不加括號就代表的是函數(shù)體。

2017年10月25日 01:34