例子:
<script>
var a = 1;
var b = 2;
(function(){
var b = 3;
a += b;
})();
alert(a); // 4
alert(b); // 2
</script>
说明匿名函数已经执行过了-->这就是匿名函数的自执行
自执行的匿名函数
1. 什么是自执行的匿名函数?
它是指形如这样的函数: (function {// code})();
2.为什么(function {// code})();可以被执行, 而function {// code}();却会报错?
(1). 首先, 要清楚两者的区别:
(function {// code})是表达式, function {// code}是函数声明.
(2). 其次, js"预编译"的特点:
js在"预编译"阶段, 会解释函数声明, 但却会忽略表式.
(3). 当js执行到function() {//code}();时, 由于function() {//code}在"预编译"阶段已经被解释过, js会跳过function(){//code}, 试图去执行();, 故会报错;
当js执行到(function {// code})();时, 由于(function {// code})是表达式, js会去对它求解得到返回值, 由于返回值是一 个函数, 故而遇到();时, 便会被执行.
另外, 函数转换为表达式的方法并不一定要靠分组操作符(),我们还可以用void操作符,~操作符,!操作符……
参考:http://www.jcodecraeer.com/a/jquery_js_ajaxjishu/2012/0628/290.html
http://bonsaiden.github.io/JavaScript-Garden/zh/#function.this