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
11function(){
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>

 

posted @ 2018-06-02 23:40  bibiguo  阅读(259)  评论(0)    收藏  举报