为何alert函数在addition自定义函数内部无法正常执行?
你的代码执行问题分析与误解点拆解
咱们一步步拆解你遇到的问题,先把你的代码贴出来更清晰:
var w = 3; var x = 4; var y = 5; var z = 6; var total = 0; function addition (w,x,y,z){ return(w,x,y,z) total=(w+x+y+z); alert(total); }
你对代码执行过程的核心误解主要有这几点:
return语句的执行逻辑理解错误:
在JavaScript里,return语句一旦执行,函数会立刻终止运行,后面的所有代码都不会再被执行。你在函数第一行就写了return(w,x,y,z),这直接导致后面的求和计算和alert弹窗代码完全没机会运行,自然看不到任何反应。
另外这里还有个细节:括号里的逗号是逗号运算符,它会依次计算每个表达式,但只会返回最后一个表达式的值,所以return(w,x,y,z)实际上等价于return z,并不是你以为的返回四个参数。函数调用的遗漏:
你只定义了addition函数,但从头到尾都没有调用它(比如写addition(w,x,y,z)触发执行)。这也是为什么把alert放在函数外部时,只会弹出全局变量total的初始值0——因为函数内部的代码根本没被执行过,total从来没被重新赋值。局部变量与全局变量的作用域混淆(次要但值得注意):
你的函数参数用了和全局变量一样的名字w,x,y,z,在函数内部,这些参数是局部变量,会覆盖全局的同名变量。不过这个点不是导致当前问题的核心,但如果后续调用函数时传了其他值,要注意这一点。
修正后的代码示例
如果想实现计算四个数的和并弹窗的效果,你可以这样修改:
var w = 3; var x = 4; var y = 5; var z = 6; var total = 0; function addition (a,b,c,d){ // 换个参数名避免和全局变量混淆,也可以不换 total = a + b + c + d; alert(total); return total; // 把return放在最后,不需要return的话也可以删掉 } // 别忘了调用函数! addition(w,x,y,z);
或者如果你不需要全局的total变量,也可以简化成:
function addition (a,b,c,d){ const sum = a + b + c + d; alert(sum); return sum; } addition(3,4,5,6);
这样执行后就能正常弹出计算结果18了。
内容的提问来源于stack exchange,提问作者rocknriter
相关产品推荐
相关产品推荐

