js的function理解

我们写一个函数,只不过是创建了一个function类型的实体。

<script type="text/javascript" language="javascript">
    function MyFunc() {

        alert('hello');
    }
    alert(typeof (MyFunc))//输出function

</script>

 上面写法称之为“定义式”,改为“变量式”就更容易理解

<script language="javascript" type="text/javascript">
    var MyFunc = function () {

        alert('hello');
    }
    alert(typeof (MyFunc)); //输出function

</script>

 返回的结果是一样的,写法等价,内部实现相同,从这里我们可以看出JS函数只是命了名的变量,类型是function,值是函数的代码体。由此,函数完全可以当做变量来使用。

<script language="javascript" type="text/javascript">
    var MyFunc = function () {

        alert('hello');
    }
    MyFunc(); //输出hello
    MyFunc = function () {

        alert('funs');
    }
    MyFunc(); //输出funs
</script>

 由上面可以看出函数被当做变量来使用了,随意赋值。看看定义式

<script language="javascript" type="text/javascript">
    function MyFunc() {
        alert("hello");

    }
    MyFunc();
    function MyFunc() {
        alert("funs");
    
    }
    MyFunc();
</script>

 两次输出的结果都是funs,奇怪第一个为什么不是hello了,两个完全相同的函数MyFunc()在其他语言中是错误的,js中是可以的。其实js引擎不是一行一行的执行的,而是一段一段的执行的,定义式函数会被优先提出来执行,执行完后才会按顺序执行其他代码,所以第一个MyFunc()的逻辑会被第二个覆盖。结果就都是funs。如果写在两个<script>标签中结果又不一样了。

<script language="javascript" type="text/javascript">
    function MyFunc() {
        alert("hello");

    }
    MyFunc();
   
</script>
<script language="javascript" type="text/javascript">
    function MyFunc() {
        alert("funs");

    }
    MyFunc();
</script>

 输出的结果是:hello,funs这个更说明了JS是一段一段的执行的。

posted @ 2013-10-31 09:34  田鼠斗王八  阅读(270)  评论(0编辑  收藏  举报