一.函数声明

二.函数表达式

三.匿名函数

可以避免冲突

匿名函数的常见形式

1.btn.onclick=function(){  

        // alert("aaaaa");  

   }

2.var fun = function(){};

3.setTime(funtion(){},200);

4.var obj={name:"song",say:function(){}}

四.匿名自执行函数

方式:1.(function(data){alert(data)})("ddd");

   2.(function(){alert("jjj");}());

   3.!function(data){alert(data)}("hhh");

   4.var fun = function(data){alert(data)}("jjj");

五.匿名自执行函数的作用

  1.用来实现闭包

  2.避免冲突  减少全局变量

六.预编译

  函数声明会预编译,函数表达式只是变量赋值 所以只能预编译变量。

 

1. function aa(){ alert("11"); }

  aa();//22

  function aa(){ alert("22"); }

   aa();//22

  以上两个函数都属于函数声明 都会在预编译阶段处理,而函数名相同 会按后来的定义  那么在执行阶段就只能得到定义的函数的结果

2.   var ledi = function(){alert('ledi1');};   

   ledi();   //ledi1

   ledi = function(){alert('ledi2');};   

     ledi(); //ledi2

以上两个都属于变量赋值  在预编译阶段,两个变量名一样   分配一个内存空间存放变量ledi的内容,当代码执行时 会按照顺序执行和赋值 

3.   function ledi(){alert('ledi1');}; 

     ledi(); //ledi1
      ledi = function (){alert('ledi2');};
    ledi(); //ledi2

 

4.

       ledi = function (){alert('ledi1');};

  ledi(); //ledi1

  function ledi(){alert('ledi2');};
    ledi();//ledi1

 函数声明比变量声明更置顶:(函数在变量上面)

var aa=123;
function aa(){
alert("fiewsf");
}
alert(aa);//123

在全局作用域中声明变量带var可以进行预解析,所以在赋值的前面执行不会报错;声明变量的时候不带var的时候,不能进行预解析,所以在赋值的前面执行会报错。