论坛首页 入门技术论坛

***** JavaScript 高级编程 之 同名函数的执行顺序 [原创] *****

浏览 1714 次
该帖已经被评为新手帖
作者 正文
   发表时间:2009-03-09   最后修改:2009-03-09

作者:Topcss QQ419074376 E-mailandpai1.0@gmail.com Time2008-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程序中,同时出现多个同名函数时,浏览器会去执行最后一个函数。

 

   发表时间:2009-03-09  
js是动态语言,被覆盖调了
0 请登录后投票
   发表时间:2009-03-10  
JS是字符串解释型语言,自然是后者定义(声明)覆盖前者(声明)。

动态性有时候会造成一定的理解歧义。
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics