javascript: 1.var a; function a(){} alert(a);这里输出function a(){}。 5

2.vara;functiona(){}a=1;alert(a);这里输出1,我想问的是js的作用域链中,同一作用域内函数在变量前,所以1可理解,但2为啥输出1啊,求大神... 2.var a; function a(){} a=1; alert(a);这里输出1,我想问的是js的作用域链中,同一作用域内函数在变量前,所以1可理解,但2为啥输出1啊,求大神解释。 展开
 我来答
百度网友01fb268
2012-12-05 · TA获得超过114个赞
知道答主
回答量:82
采纳率:0%
帮助的人:64.6万
展开全部
js是一种弱类型的语言,1中,输出的是a这个方法,2中,由于你在a方法后,又对a执行了a=1这个赋值操作;所以alert结果是1,那是必然的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
缓步莫迟疑C
2012-12-05 · TA获得超过1.1万个赞
知道大有可为答主
回答量:6217
采纳率:73%
帮助的人:6484万
展开全部
函数a与变量a重名,后面的赋值语句会使前面的函数对象失效,而使a变成一个普通变量.
追问
其余的人貌似连作用域链都不知道,你的意思是定义var a:作用域链里有变量a,值为undefined,后面定义了function a(){},作用域链里只有函数a,变量a被覆盖了,后面a=1;时,函数a又被覆盖,a变为变量,值为1吗,麻烦了
追答
具体在JS内部是如何处理这两个a的我还真不清楚,或许函数a和变量a都存在于JS内部,但你在调用时JS无法区分你要调用哪一个,或者说JS只是按他的顺序将找到的第一个返回给你.而这个顺序可能是变量,函数.
JS是预编译机制会使函数定义被优先处理,所以即使改变语句顺序也不会改变输出结果,就好比
var a;
a=1;
function a(){}
alert(a);
结果依然是数值1,而不是函数.
所以要解释这个问题可能要深入研究JS的内部.
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
许下丶
2012-12-05 · 超过22用户采纳过TA的回答
知道答主
回答量:128
采纳率:0%
帮助的人:58万
展开全部
var a;
function a(){}
a=1;
alert(a);
不知道你问的是什么意思,你上面的代码,函数并没有执行,只是弹出了a而已
追问
我没有说要执行函数,可能我没说清楚,我想问的是alert(a)时,js引擎怎么去找a这个变量的值,如果有一个函数和变量同名,js引擎取哪一个,依据啥取
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我是php工程师
2012-12-18 · TA获得超过149个赞
知道小有建树答主
回答量:354
采纳率:0%
帮助的人:200万
展开全部
后面的a把前面的覆盖掉了 正常
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式