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

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

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

阅读 4.3k
4 个回答

先回答:

  • 函数名返回的是函数体

  • 函数名加括号返回的是调用这个函数产生的返回值

所以当你不加括号的时候。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()对它调用会报错。

你可以理解为加括号就是把函数名代表的函数体执行一遍。

不加括号就代表的是函数体。

()是执行。
return f2;返回f2方法
return f2();返回f2执行结果

return f2 是把函数字面量返回了
加括号就是执行了,会在赋值之前先计算出结果

你可以试试在 console 里面:

function f() {
    return 1
}

console.log(f)    // => ƒ f() {
                  //          return 1
                  //    }
console.log(f())  // => 1

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

// 不写return就会默认return undefined

}

return f2(): f2函数会先被调用,由于没有写return ,所以会返回undefined

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题