该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-03-09
最后修改:2009-03-09
作者:Topcss QQ:419074376 E-mail:andpai1.0@gmail.com Time:2008-10-20 背景:这是帮一个做教师的朋友写的,用来上课教学。
当我们在JavaScript中,要执行一个函数往往都是这样写
function aa(){ alert("first function"); }; aa();
有人会问能否再简化呢?答案是肯定的!只要你愿意我们还可以通过括号直接调用函数
(function aa(){ alert("(function)();"); })();
当然,也又别的方法,试试在函数前写上+或者-吧!
+function aa(){ alert("+function();"); }();
这是,我们浏览器中的代码应该是这样的:
<html> <head> <title>JavaScript 高级编程 之 同名函数的执行顺序</title> <script language="javascript" type="text/javascript"> function aa(){ alert("first function"); }; aa();
(function aa(){ alert("(function)();"); })();
+function aa(){ alert("+function();"); }(); </script> </head> <body> </body> </html>
现在让我们来想一想浏览器会出现怎样的结果?
坐在后排的那哥们儿举手了。听听他怎么说,他说: “浏览器会按照1.first function 2.(function)(); 3.+function(); 方式执行”
我肯定一定会有很多人这样回答。好的,你可以坐下了。还是让我们去看看执行的结果吧!
浏览器结果: 1.+function(); 2.(function)(); 3.+function(); 真是不可思议,为什么呢?
难道浏览器会认为在函数前面写+或者-会让函数的执行级别更高?事实并非如此!下面我们再写一个函数,便可以证明这个结论是错误的。
function aa(){ alert("last function"); };
或许,我们还会有带参的函数需要执行。
function aa(msg){ alert(msg); } aa("hello topcss!");
好了,我们再去看看浏览器是否执行最后一个函数,也就是带参的函数呢。
的确,事实正是如此,她执行了最后一个函数。太棒了。
现在,我们得出了一个结论: 当我们在一个JavaScript程序中,同时出现多个同名函数时,浏览器会去执行最后一个函数。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-03-09
js是动态语言,被覆盖调了
|
|
返回顶楼 | |
发表时间:2009-03-10
JS是字符串解释型语言,自然是后者定义(声明)覆盖前者(声明)。
动态性有时候会造成一定的理解歧义。 |
|
返回顶楼 | |
浏览 1733 次