Javascript中自执行函数

来源:互联网 发布:怎样申请淘宝卡 编辑:程序博客网 时间:2024/04/27 20:58

关于Javascript中自执行函数

刚学js不久,在观察一些其他人写的js函数时,会发现他们写的函数与我们写的函数却是有一点不一样,我写代码一直的思维就是凡是函数,就必须得先声明,后调用,但是看有的人写的函数代码却是自己执行的

<script>    (function(){        alert("hello,I am coming!");    })();</script>

但是它确确实实的弹出来了,然后在网上了解了一下,发现还有这样写的,当然,function里的代码是我随便写的,主要是看语法。

<script>    (function(){        alert("hello,I am coming!");    }());</script>

然后它也确确实实的弹出来了。
在网上这种函数的叫法貌似比较多的样子,个人就选了一个自执行函数来称呼了,这样叫也挺贴切的。

说到自执行函数,就不得不提 函数声明函数表达式了;

函数声明

类似于这样

function()    //code};  //这是匿名函数函数声明function abc()    //code}; //这是有名函数函数声明,abc就是这个函数的名字。

而函数表达式也是用类似于表达式的形式来声明函数。

 var abc = function(){    //code};

调用abc里面的函数时,只需这样 abc(); ,把abc当成这个函数的函数名就行;
现在看上面的自执行函数,不就是把函数代码块用括号括起来,再在后面添加一个括号就搞定了

可是函数声明和函数表达式似乎没有什么区别,在用法上也差不多,那为什么要分函数声明和函数表达式呢?


在这里又要扯到js的解析器了,在你看来,这两者似乎没有区别,但是在js的解析器的眼里,函数声明与函数表达式可就是大不一样了。对于函数声明,js解析器会优先读取,确保在所有代码执行之前声明已经被解析,而函数表达式,当js在解析代码时,读到某句表达式时,便会立刻解析,当使用函数声明的形式来定义函数时,调用语句的地方那就随你写了,写在函数声明的前后都是可以的。

自执行函数由于把函数的声明写在了()之中,所以解释器以表达式来解析其中代码,如果向()中传入函数声明会直接返回此函数,

所以

<script>    (function(){        alert("hello,I am coming!");    })();   //上面用过的</script>  

这句代码就相当于

<script>    function a(){        alert("hello,I am coming!");    };    a(); //调用a函数</script>  

或者

<script>    var a=function(){        alert("hello,I am coming!");    };    a(); //调用a函数</script>  

所以只要能让JavaScript解释器以函数表达式而不是函数声明来处理匿名函数,那么这个立即执行就不是问题了。

总结

第一次写博客,Markdown还挺好用的。

0 0