函数声明与函数表达式

  

函数是JavaScript非常重要的一部分,它被称为第一等公民,可以看出它的地位是何等尊贵何等重要。根据我一贯的作风,会深入原理性的东西,那这篇文章主要来挖掘函数声明与函数表达式相关知识。

  

在JavaScript中定义一个函数有四种方式

  
      <李>函数声明李   <李>函数表达式李   <李> ES6里箭头函数   <李>新功能()   
  

函数声明

  

语法

  
 <=坝镅詊avascript代码类>函数函数名(参数){
  要执行的代码
  } 
  

调用

  
  
      <李>函数名(参数)   <李>函数名打电话给(函数名,参数)   <李>函数名苹果(函数名,(参数])   <李>新函数名(参数)   <李>定时器李   <李>把函数声明变成函数表达式再调用李   <李> ES6里的模版字符串李   
     
 <=坝镅詊avascript代码类>函数fn(文本){
  console.log(文本);
  }
  
  fn(“直接调用的);
  
  fn.call (fn,用电话调用的);
  
  fn.apply (fn,['用应用调用的));
  
  新fn(用新调用');
  
  setTimeout (fn(“用定时器调用'));
  
  (函数fn(文本){
  console.log(文本);
  })(“转成函数表达式后调用的);
  
  fn的用模版字符串调用”;//ES6里语法
   
  

函数表达式

  

语法

  
 <=坝镅詊avascript代码类> var/我们/常量变量=function(参数){
  要执行的代码
  } 
  

调用

  
  
      <李>函数名(参数)   <李>函数名打电话给(函数名,参数)   <李>函数名苹果(函数名,(参数])   <李>新函数名(参数)   <李>直接在后面加上一对小括号   <李>定时器李   <李> ES6里的模版字符串李   <李>以被赋值的形式出现(根据具体形式调用)   
     
 <=坝镅詊avascript代码类> const fn=function(文本){
  console.log(文本);
  };
  
  fn(“直接调用的);
  
  fn.call (fn,用电话调用的);
  
  fn.apply (fn,['用应用调用的));
  
  新fn(用新调用');
  
  const fn2=function(文本){
  console.log(文本);
  }(“直接在后面加小括号调用的);
  
  setTimeout (fn(“用定时器调用'));
  
  fn的用模版字符串调用”;
  
  document.onclick=function () {
  console.log(“以被赋值的形式出现也是一个函数表达式”);
  }; 
  

函数声明与函数表达式的区别

  
      <李>函数声明必须带有标识符(函数名称),函数表达式则可以省略   
        <李>表达式里的名字不能在函数外面用,只能在函数内部用李   <李>函数有一个名字属性,指向紧跟在函数关键字之后的那个函数名。如果函数表达式没有名字,那名属性指向变量名李   李
      <李>函数声明会被预解析,函数表达式不会李   
  
 <=坝镅詊avascript代码类>//1名字//函数声明必需带名字
  函数fn () {};//函数(){};//报错,没有名字//函数表达式可以没有名字
  让fn1=function () {};
  (函数(){});
  !函数(){};//表达式名字的作用
  让fn2=函数newFn () {
  console.log (newFn);//可以在这里面用。有一个作用就是在这里用递归
  };
  fn2 ();//newFn ();//报错,不能在外面用//名字属性
  console.log (//fn fn.name
  fn1.name,//fn1表达式没有名字,名字属性指向表达式变量名
  fn2.name//newFn
  );//2、预解析
  fn3 ();
  函数fn3 () {
  console.log (“fn3”);
  }//fn4 ();//报错,不会被预解析
  让fn4=function () {
  console.log (“fn4”);
  } 
  

自执行函数

  

自执行函数也叫立即调用的函数表达式(IIFE)。它的作用为我们不用主动地去调用函数,它会自己调用,对于做模块化,处理组件是非常有用的。
首先来看一个问题,调用函数最简单的方法就是加一对小括号,那我在函数声明的末尾加一对括号后,这个函数能否调用呢?

  
 <=坝镅詊avascript代码类>函数fn () {
  console.log (1);
  }();//报错
  
  const fn1=function () {
  console.log('表达式执行”);
  }();//执行函数 
  

函数声明不能直接调用的原因

  
      <李>小括号里只能放表达式,不能放语句李

    函数声明与函数表达式