function f1(){ var n=999; function f2(){ alert(n); } return f2; } var result=f1(); result(); // 999请问这个代码中, 为什么return f2为什么不加() , 我试了一下,加() 最后会提示result未定义而报错。小白问一下这里面有什么讲究么? 返回f2和返回f2()有啥区别。
1 回答
MYYA
TA贡献1868条经验 获得超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()对它调用会报错。
你可以理解为加括号就是把函数名代表的函数体执行一遍。
不加括号就代表的是函数体。
添加回答
举报
0/150
提交
取消
