一.函数声明
二.函数表达式
三.匿名函数
可以避免冲突
匿名函数的常见形式
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的时候,不能进行预解析,所以在赋值的前面执行会报错。