将函数输出赋值给变量时,函数是否会完整执行?
关于函数调用与返回值执行逻辑的解答
嘿,这个问题问得很实在!直接给你结论:当你执行var c = a();的时候,函数a()会被完整地执行一遍,绝对不是只提取返回值那么简单。
具体解释:
JavaScript在处理函数调用的时候,会严格按照顺序执行函数体里的每一行代码——也就是你示例里写的blah blah blah部分,不管这部分代码是打印日志、修改变量还是调用其他函数,都会全部跑完。只有当函数体的所有逻辑执行完毕,遇到return b的时候,才会把b的值返回,然后赋值给变量c。
举个更直观的例子,把你的函数a()补全一下:
function a() { console.log("我是函数a里的代码,正在执行!"); let b = 456; // 这里可以加任意逻辑,比如修改全局变量、调用其他函数 return b; } var c = a(); // 此时控制台会先输出"我是函数a里的代码,正在执行!",然后c的值被设为456
结合你的示例代码补充:
在你的代码里,当var c = a();执行完成后,c就已经拿到了a()返回的b值。之后调用d(c)的时候,只是把已经存储好的c的值传递给函数d,不会再重新执行a()了。
核心要点总结:
- 只要写出
a()这种函数调用语句,函数体的所有代码就会被完整执行 return语句的作用是终止函数执行,同时把指定的值返回给调用者,完成赋值操作- 变量
c存储的是a()执行完毕后的返回结果,后续使用c不会再触发a()的执行
内容的提问来源于stack exchange,提问作者The One Of Rowlet
相关产品推荐
相关产品推荐

