WEB开发网
开发学院网页设计JavaScript javascript的stack overflow 阅读

javascript的stack overflow

 2010-09-14 13:16:24 来源:WEB开发网   
核心提示:写一个很简单的页面和脚本1<html>2<head>3<title>fanweixiao's test</title>4<script type="text/javascript">5function onclick()6{7ale

写一个很简单的页面和脚本

1<html>
2<head>
3<title>fanweixiao's test</title>
4<script type="text/javascript">
5function onclick()
6{
7  alert('范维肖');
8}
9</script>
10</head>
11<body>
12<input type="button" id="btn1" onclick="onclick();" value="go"/>
13</body>

相当简单的程序,在firefox上跑是没有问题的,但是在ie上就是没有预想的结果。很失误的随便起来一个叫onclick的function name,后来在这里找到了对该问题的解释:

onclick 事件触发后先在当前的上下文(btn1对象)中寻找,然后再作用域链(scope chain)和global function里找,当在当前上下文中找onclick(="onlick",要执行的函数),但是不巧的是btn1里有一个属性叫onclick了(就是这个event),他的值又是onclick,因此无限产生了递归调用。最终导致stack overflow。

javascript的stack overflow

而firefox很酷的在假死了一会后正确的显示出了结果,不过firebug提示了一个错误:

javascript的stack overflow

firefox很酷的知道有太多的递归,但是最酷的是他最终能执行到我们定义的onlick(),是不是ff会在发现死循环后破坏规则去global里找到了真正的onclick?希望有知道内情的朋友指点一下。

Tags:javascript stack overflow

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接