求大神帮忙解答一下关于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啊
始终想不明白
展开
 我来答
还下雨吗今晚
推荐于2016-09-05 · TA获得超过229个赞
知道答主
回答量:41
采纳率:0%
帮助的人:23万
展开全部

是这样的:

首先,在a函数的定义里,有一个形参,是b。而调用的时候,是a(1)的形式,这时候,b=1;

接下来,运行到了a的函数体内,alert(b)时,b为1,因此,弹窗显示1。

接下来,重新定义了b,b为一个函数。

定义完之后,执行b(),这时候,就到了上面定义的函数体内,alert(b),这时候,b是一个函数,因此,弹窗显示了b的定义。


这里面涉及到了:

  1. 函数的形参和实参。

  2. 变量作用域,局部变量与全局变量。

  3. alert函数参数为function时候的情况。

更多追问追答
追问
也就是说代码是从上到下执行的,在调用之前,b就已经被重新赋值,赋值了一个匿名函数,所以下面调用的时候,b的值会显示一个函数,是这样吧
追答
不是从上往下执行的,先定义了函数a,但是a里面的东西并没有被执行。
然后调用开始的时候,b的值就是1,因此第一个alert是1。
接下来继续进行,函数内部b把形参的b覆盖了,这时候b的值为一个function,因此alert的时候,出来的是b的定义。
如果a(1)下面还有继续调用b,那么b的值为null。因为,形参定义的b只在函数范围内有效;而局部变量b只在函数体内有效。而全局变量b还没有被定义。

形参的作用范围:
在函数体内有效。
局部变量的作用范围:
在所定义函数的花括号之间有效。
全局变量的作用范围:
在全局有效。
不过,局部变量的值可以在作用域内覆盖全局变量的值。但是出了作用域,全局变量的值依旧有效。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式