问题描述
- js的第二次弹窗为什么存在呢?
- function b(){
var a=1;
function c(){
alert(a);
}
return c;
}
alert(b()());
我的理解是只弹一次,为什么会有第二次undefined呢?
解决方案
alert(b()());可以分成几部分,根据优先级,alert内先解析括号内的,也就是b()()代码,碰到b(),因为b是函数,后面跟()就执行了function b,该方法返回
return c,返回了function c。于是返回的结果和后面的()结合,执行c函数。alert(a)弹出1,但没有返回值,所以对于最外层alert来说就是undefined了。
这就是典型的闭包。
改成下面这样就不出现undefined了。
function b(){ var a=1;function c(){ alert(a);return 'b';}return c;}alert(b()());
解决方案二:
因为在调用b()的时候,又弹框一次,本身,b()就是弹框出现的,在b()中再一次,就会出现两次了,建议修改一下代码
解决方案三:
浏览器直接执行alert(b()()),无法解析b()(),但可以解析b(),所以调用了b(),b()中调用c(),弹一次“1”,这时仍然无法解析,所以弹“undefined”
时间: 2024-10-20 12:00:18