函数声明与表达式、匿名函数与具名函数、立即执行函数

定义函数的三种方式:

  • 函数声明:function  函数名称(参数){函数体}
  • 表达式:var express = function 函数名称(参数){函数体}
  • 构造函数:var fun = new function()

一、函数声明

函数声明是以关键字开头的,它有一个明显的特征:函数声明的提升,js在解析代码时将函数声明提升到当前作用域的顶部,所以把函数声明放在调用他的语句后面

 

foo("hello");   //输出  hello

function foo(name){

console.log(name);

}

 

  1. 函数声明与表达式的区分

就是看关键字function在声明中的位置,他的位置是整个函数中的位置,如果function是声明中的第一个位置,那就是函数声明,否则就是表达式

1  (function(){...}());//函数表达式
2 
3     +function test(){...}//函数表达式
4 
5    (function(){//function既不是函数声明也不是函数表达式,只是一个参数
6         ...
7     },1000);    

    2.差异

 名称和标识符的绑定位置

 1  var a = 2;
 2     function foo() { 
 3         var a = 3;
 4         console.log( a ); // 3
 5     } 
 6     foo(); 
 7     console.log( a ); // 2
 8 
 9     /*---------*/
10 
11     (function foo(){ 
12         var a = 3;
13         console.log( a ); // 3
14     })(); 
15     console.log( a ); // 2  

第一个片段中的foo被绑定在所在作用域中,可以通过foo()来调用,第二个片段中foo被绑定在函数表达式自身的的函数中而不是作用域中

也就是说匿名函数作为函数表达式意味着foo只能在它所代表的位置访问,也就是指局部作用域,优点就是不会被全局污染

二、匿名与具名函数

  • 具名函数和匿名函数的区别:看关键字·function后的函数名称,有函数名称的是具名函数,没有的是匿名函数
 1     setInterval(function(){//匿名函数
 2         ...
 3     },1000);
 4 
 5     
 8 
 9     var funA = function(){//匿名函数表达式
10         ...
11     }
12 
13     var funB = function test(){
14         ...
15     }

三、立即执行函数

 1 var express=function () {
 2 
 3 console.log("hello word!");
 4 
 5 }();    //运行,发现函数直接执行,结果输出了"hello word!"
 6 
 7  
 8 
 9 function () {
10 
11 console.log("hello word!");
12 
13 }();   //报错    Uncaught SyntaxError: Unexpected token )   
14 
15 // 因为以function开头,认为是函数声明,结果没有函数名,就报错了
16 
17  
18 
19 function foo() {
20 console.log("hello word!");
21 }();   //报错    Uncaught SyntaxError: Unexpected token ) 

在函数表达式后面紧跟一小括号(),函数就会立即执行,两大要点:表达式、括号()

(function 函数名称(可写可不写) (参数){函数体}  ());

立即执行函数只要知道只有表达式才能执行,函数表达式也会被执行,其他除外

 

posted @ 2020-08-15 15:11  花开荼蘼Ⅴ彼岸未归  阅读(695)  评论(0编辑  收藏  举报