day-8.1 函数类型(有名函数(函数声明、函数表达式),匿名函数)、自执行等。
函数分为有名函数和匿名函数。
一、匿名函数
匿名函数不能单独出现,表示一条语句。
如下:这是一个匿名函数,但是单独出现的时候JS无法解析,会报错。(这应该是跟变量有关系,没有地方寄存这个值(函数)去供解释器解释执行)
1 <script> 2 function () { 3 alert(1); 4 } 5 </script>
匿名函数一般跟事件属性一起使用
比如
1 <script> 2 document.onlick = function () { 3 alert(1) 4 } 5 </script>
或者当成某一个函数的参数
1 <script> 2 alert( 3 function(){alert(1)} //匿名函数为alert()函数的实参。 4 ) 5 </script>
也可以放在数组和json里面,当成某个值。
但是就是不能直接写在代码里面单独成为一条语句。
二、有名函数的定义有两种方式
1、直接声明函数名(函数声明)
1 <script> 2 test(); //执行函数,弹出1,这种定义声明的方式,执行语句可以放在定义语句之前。 3 function test (){ 4 alert(1); 5 } 6 </script>
2、变量名声明函数(函数表达式)
1 <script> 2 var a = function (){ 3 alert(1) 4 } 5 a(); //执行函数,弹窗1,执行语句放在定义语句之后 6 </script>
之所以,第一种定义方式支持执行函数放在定义函数之前,而第二种不支持,可能是作用域和解析顺序的原因。
两种定义方式,第一种方式:函数声明的花括号后面可以不用加分号,因为这是一个完整的语句;
而第二种方式函数表达式,因为这是一个赋值表达式,并不只是一个语句,而是一个表达式,表达式后面要加分号,表示表达式结束。
3、函数表达式和函数声明的区别
函数声明语句不能自执行
1 <script> 2 function a () { 3 alert(1); 4 }(); //报错,无法自执行。 5 </script>
而函数表达式可以自执行
自执行不建议用有名函数。
1 <script> 2 var a = function (){ 3 alert(1); 4 }(); //自执函数表达式1 5 (function (){ 6 alert(1); 7 })(); //自执行函数表达式2 8 (function(){ 9 alert(1); 10 }()); //自执行函数表达式3 11 !function(){ 12 alert(1); 13 }(); //自执行函数表达式4 14 ~function(){ 15 alert(2); 16 }(); //自执行函数表达式5 17 -function(){ 18 alert(2); 19 }(); //自执行函数表达式6 20 +function(){ 21 alert(4); 22 }(); //自执行函数表达式7 23 </script>
4、函数自执行的意义
通过函数自执行来隔离作用域,让代码模块化,让变量变成局部变量,比较容易控制不引发冲突。
1 <script> 2 var a = 20 ; 3 (function(){ 4 var a = 15; 5 alert(a); //输出15 6 })(); 7 alert(a); //输出20,虽然两个变量名都为a,但是通过函数自执行隔离作用域,a的值就不同,避免变量名过多重复的时候,引发冲突,同时让代码模块化,比较容易维护。 8 </script>
浙公网安备 33010602011771号