javascript中函数声明、函数表达式以及匿名函数和自执行函数

xiaoxiao2021-02-28  118

                                                          javascript中函数声明、函数表达式以及匿名函数和自执行函数

1.函数声明和函数表达式

   1)函数声明必须始终带有一个标识符(Identifier),也就是我们所说的函数名,而函数表达式则可以省略

  

//函数声明 function add(a,b){ c = a + b; return c; } //函数表达式 var expression = function (a,b){ c = a + b; return c; }  2)函数声明和函数表达式的区别

    (1)关于函数声明,它最重要的一个特征就是函数声明提升,意思是执行代码之前先读取函数声明。这意味着可以把函数声明放在调用它的语句之后

     (2)函数表达式在使用前必须先赋值

     (3)最终原因是:解析器在向执行环境中加载数据时,解析器会率先读取函数声明,并使其在执行任何代码前可用;至于函数表达式,则必须等到解析器执行到它的所在的的代码行,才会真正的被解析。

    

var count1 = add(2,3); console.log("count1="+count1); //在控制台输出"count1=5" //函数声明 function add(a,b){ c = a + b; return c; } var count2 = expression(2,3); //报错,Uncaught TypeError: expression is not a function console.log("count2="+count2); //函数表达式 var expression = function (a,b){ c = a + b; return c; }3.匿名函数以及两种调用方式

//函数表达式 var expression = function (a,b){ c = a + b; return c; } var count3 = expression(2,3); console.log("count3="+count3); //在控制台输出"count3=5" var count4 = (function(a,b) {c = a + b; return c;})(2,3); console.log("count4="+count4); //在控制台输出"count4=5"匿名函数,顾名思义就是没有名字的函数

两种调用方式:

   (1)上面的函数表达式中的创建,即创建一个匿名函数,并将匿名函数赋值给变量expression,用expression来进行函数的调用,调用的方式就是在变量expression后面加上一对括号(),如果有参数传入的话就如expression(2,3)。

    (2)使用()将匿名函数括起来,然后后面再加一对小括号(包含参数列表)

4.自执行函数

  创建了一个匿名的函数,并立即执行它

  

//自执行函数 (function(a,b) { c = a + b; console.log("c="+c); return c; })(2,3);但是下面这段代码会报错

function(a,b) { //报错,提示"Uncaught SyntaxError: Unexpected token ( " c = a + b; console.log("c="+c); return c; }(2,3);报错的原因是:因为Javascript将function关键字当作一个函数声明的开始,而函数声明后面不能加圆括号而是带有一个标识符(Identifier)即函数名 要想上面的代码不报错,就必须要实现赋值,如a = function(){}(),"a="这个告诉了编译器这个是一个函数表达式,而不是函数的声明。因为函数表达式后面可以跟圆括号

var count5 = function(a,b) { c = a + b; console.log("c="+c); //在控制台输出"c=5" return c; }(2,3); console.log("count5="+count5); //在控制台输出"count5=5" 5.综合应用

下面代码执行的效果是:在控制台输出"hello world"

var DJFUN = function(){ function hellofun(){ console.log("hello world"); } return { pop: function(){ hellofun(); } } }(); DJFUN.pop(); 代码解析:

  (1)DJFUN是一个变量,把一个自执行函数(定义了一个匿名函数并执行了该函数)赋值给了变量DJFUN

  (2)这个匿名函数返回的是一个对象,该对象有一个pop方法

  (3)这个pop方法的实现实际上调用了hellofun函数

  (4)hellofun函数是在控制台输出"hello world"

  

转载请注明原文地址: https://www.6miu.com/read-31443.html

最新回复(0)