匿名函数从语法上叫函数直接量,JavaScript语法需要包围匿名函数的括号,事实上自调用匿名函数有两种写法: 为什么要传入window呢? 通过以上的介绍,我们大概了解通过 ()可以使得一个函数表达式立即执行。 所以 ( function () {…} ) () 内部定义的变量不会和外部的变量发生冲突,俗称“匿名包裹器”或“命名空间”。 ( function () { // ... 所有的变量和function都在这里声明,并且作用域也只能在这个匿名闭包里 // ...但是这里的代码依然可以访问外部全局的对象 } ()); 同下面 (function () { /* 内部代码 */ }) ();

匿名函数有两种用法:
赋值
自我执行
1.声明一个匿名函数,直接赋值给某一个事件

windon.onload = function(){
alert('hello');
};

 


2.使用匿名函数表达式。将匿名函数,赋值给一个变量。
声明:var func=function(){ }
调用:func();

var show = function(){
alert('hello');
};
show();

注意:使用匿名函数表达式时,函数的调用语句,必须放在函数声明语句之后!!!
原因:检查装载时,会先对show变量及这个匿名函数声明,此时,还未将匿名函数赋值给show变量,如果在表达式之前调用,会报错 show is not a function

js代码的执行顺序问题
js代码在运行时,会分为两大部分———检查装载 和 执行阶段。

检查装载阶段:会先检测代码的语法错误,进行变量、函数的声明
执行阶段:变量的赋值、函数的调用等,都属于执行阶段。
3.自执行函数。

;(function () {
    console.log('匿名函数自调用1');
})()
 !function () {
    console.log('匿名函数自调用2');
}()
复制代码
//1.使用 !开头,结构清晰,不容易混乱,推荐使用;
!function(){
    document.write('ni hao');
}()
    
//2.无法表明函数与之后的()的整体性,不推荐使用。
(function(){
    document.write('wo hao');
})();

//3.能够将匿名函数与调用的()为一个整体,官方推荐使用;
(function(){
    document.write('hello');
}());

//4.放在中括号内执行
[function(){
    document.write('world');
}()];

//5.使用 + 运算符
+function(){
    document.write('ni hao');
}()

//6.使用 - 运算符
-function(){
    document.write('ni hao');
}()

//7.使用波浪符 ~
~function(){
    document.write('ni hao');
}()

//8.使用 void
void function(){
    document.write('ni hao');
}()
复制代码