请问js返回的值加不加括号的区别

function f1(){

    var n=999;

    function f2(){

      alert(n); 

    }

    return f2;

  }

  var result=f1();

  result(); // 999

请问这个代码中, 为什么return f2为什么不加() , 我试了一下,加() 最后会提示result未定义而报错。小白问一下这里面有什么讲究么? 返回f2和返回f2()有啥区别。

皈依舞
浏览 639回答 1
1回答

MYYA

先回答:函数名返回的是函数体函数名加括号返回的是调用这个函数产生的返回值所以当你不加括号的时候。f1返回f2的函数体就是function f2(n){     alert(n) }这个东西。然后下面的代码var result = f1()就相当于把这个函数的执行结果(也就是这个函数的返回值return)给了result(即f2的函数体),这时候result是个函数名。然后在函数名后面加括号调用函数就会去执行函数,所以result()其实也就是执行了上面那个函数里面的代码。如果你加了括号,f1 return的是f2(),也就是f2的返回值,因为f2函数体里面没有写return,所以它返回的是undefined。所以result === undefined,不是一个函数。所以对return()对它调用会报错。你可以理解为加括号就是把函数名代表的函数体执行一遍。不加括号就代表的是函数体。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript