求大神帮忙解答一下关于javascript问题
functiona(b){alert(b);b=function(){alert(b);}b();}a(1);这里的b();是如何调用的,明明都没有声明b函数啊!还有b=...
function a(b) {
alert(b);
b = function () {
alert(b);
}
b();
}
a(1);
这里的b();是如何调用的,明明都没有声明b函数啊!
还有b = function () {alert(b);} 这里alert为什么会是它本身 不是传参了一个1吗 b赋值为1啊
始终想不明白 展开
alert(b);
b = function () {
alert(b);
}
b();
}
a(1);
这里的b();是如何调用的,明明都没有声明b函数啊!
还有b = function () {alert(b);} 这里alert为什么会是它本身 不是传参了一个1吗 b赋值为1啊
始终想不明白 展开
展开全部
是这样的:
首先,在a函数的定义里,有一个形参,是b。而调用的时候,是a(1)的形式,这时候,b=1;
接下来,运行到了a的函数体内,alert(b)时,b为1,因此,弹窗显示1。
接下来,重新定义了b,b为一个函数。
定义完之后,执行b(),这时候,就到了上面定义的函数体内,alert(b),这时候,b是一个函数,因此,弹窗显示了b的定义。
这里面涉及到了:
函数的形参和实参。
变量作用域,局部变量与全局变量。
alert函数参数为function时候的情况。
更多追问追答
追问
也就是说代码是从上到下执行的,在调用之前,b就已经被重新赋值,赋值了一个匿名函数,所以下面调用的时候,b的值会显示一个函数,是这样吧
追答
不是从上往下执行的,先定义了函数a,但是a里面的东西并没有被执行。
然后调用开始的时候,b的值就是1,因此第一个alert是1。
接下来继续进行,函数内部b把形参的b覆盖了,这时候b的值为一个function,因此alert的时候,出来的是b的定义。
如果a(1)下面还有继续调用b,那么b的值为null。因为,形参定义的b只在函数范围内有效;而局部变量b只在函数体内有效。而全局变量b还没有被定义。
形参的作用范围:
在函数体内有效。
局部变量的作用范围:
在所定义函数的花括号之间有效。
全局变量的作用范围:
在全局有效。
不过,局部变量的值可以在作用域内覆盖全局变量的值。但是出了作用域,全局变量的值依旧有效。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询