js运行与编译的理解

big_student 2011-04-26 11:15:18

var a = 1,
b = function a(x) {
x && a(--x);
};
alert(a);
alert(b);

函数应该是在编译时就已经定义好的,所以执行到var a=1的时候 函数a已经被覆盖了,所以a的值是1,但是b的值为什么还是a函数,我的理解有问题吗?
...全文
131 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
big_student 2011-05-05
  • 打赏
  • 举报
回复
看不懂。。。
Exodia 2011-04-26
  • 打赏
  • 举报
回复
b = function a(x) {
x && a(--x);
};

这个是函数表达式和函数声明的混合, 按标准来说a对外是不可见的,只能在函数内部访问到,同时,这个句子作为函数表达式处理,即执行的时候对b赋值, 所以你访问的a是var a = 1中的a, 而b则是相关函数。

IE中处理方式不同:a则是对外可见的,a被覆盖为1,但b同样被赋值成相关函数, 不要把b=function的那个语句简单的理解成 function a(){}; b = a; 这样,b被赋值的是整个函数代码,而不是a; 你alert出b的结果可以很好的说明这种情况。

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧