Function(函数)

 

 

函数

 

将一系列代码或者操作行为打包到一起形成的就是函数,一块有特定功能的代码. 存放运行逻辑的代码块,以便重复使用

函数声明和函数表达式却别

 

  • 函数声明 是function开头 作为关键字,声明函数,并紧接 函数名 (){};

  • 函数声明必须是一条单独的语句,并且必须具备函数名,这是调用函数的基础;

  • 其他都是函数表达式,可以成为其他语句的一部分,比如赋值

匿名函数-没有函数名(多结合事件和计时器)

 

  • 把匿名函数赋值给变量

  • 直接使用

  • 函数名可以重复

    • 函数名区分大小写

    • 后面的会覆盖前面的,

    • 函数的定义和变量的声明可以前置

      • 会提前到当前作用域的最前面

实参跟形参

 

形参:不需要声明,js可以识别,可以理解为已经默认声明过了 形参的目的是,模拟参数,安排参数参与函数内部的逻辑;

 

实参:调用是传的参数;

 

实参跟形参的赋值,遵守变量赋值原则

  • 简单类型,拷贝赋值

  • 复杂赋值,引用赋值

  • 实参把值赋值给形参(要考虑是简单类型,还是复杂类型)

函数默认返回

 

函数默认return undefind;

函数声明(函数定义)

  function functionName() {}
  console.log(functionName); // functionName(){}
函数表达式

  let fn = function () {};
具名函数(有名函数)

  // 有名函数,可以直接通过函数名调用
  function xx() {
    console.log('么么哒');
  }
  xx();


  let fn = function () {
    console.log('不么么哒');
  };
  // 赋值给变量,变量接收函数,变量名即为函数名 因此也是有名函数 fn直接调用 fn()
匿名函数

  // function(){} // 直接报错
  // 由于没有名字的函数, 没有办法进行调用,所以它不能是单独的一条语句

  // 更多的是配合别的语句使用,如赋值操作,或者存于数组 或者对象中,可以通过数组序号和对象属性调用
  box.onclick = function () {};
  let arr = [function () {}];
  let json = { fn1: function () {} };
函数自执行
  // 有名函数声明不能自执行,会报错,需要被调用

  let fn = function () {
    console.log('函数的执行');
  };
  fn(); // let 声明 先声明, 再使用

  // function(){}()
  // 匿名函数直接执行,js解释器会区别函数声明和函数表达式,当前语句是以function开头,
  // 因此识别为 函数声明,函数声明必须带上函数名,因此直接报错 并且 函数声明也不能自执行

  // 用括号全部包住,防止识别为函数声明,就可以自执行了
  (function () {
    console.log('自执行1');
  })();
  (function(){console.log(“自执行2")}())

  let fn = (function () {
    console.log(123);
  })();
  // fn();  // uncaught TypeError: fn is not a function
  // 立即执行的函数表达式 函数名不能再次调用
函数的他执行(事件函数)

  // 函数被其他东西触发,比如事件函数,函数通过等号赋值给事件的时候,称之为事件函数,触发事件使函数处触发,称之为 函数的他执行
IIFE 立即执行函数表达式

  (function(){console.log("自执行1")}())
  (function(){console.log("自执行2")})()
  !function(){}()
  +function(){}()
  -function(){}()
  ~function(){}()
// 有条件的创建函数
// 函数可以被有条件来声明,这意味着,函数声明可能出现在一个 if 语句里,
// 但是,这种声明方式在不同的浏览器里可能有不同的效果。
// 因此,不应该在生成环境代码中使用这种声明方式,应该使用函数表达式来代替。

  var hoisted = 'foo' in this;
  console.log(`'foo' name ${hoisted ? 'is' : 'is not'} hoisted. typeof foo is ${typeof foo}`);
  if (false) {
    function foo() {
      return 1;
    }
  }
  // 在Chrome里:
  // 'foo' 变量名被提升,但是 typeof foo 为 undefined
  //
  // 在Firefox里:
  // 'foo' 变量名被提升. 但是 typeof foo 为 undefined
  //
  // 在Edge里:
  // 'foo' 变量名未被提升. 而且 typeof foo 为 undefined
  //
  // 在Safari里:
  // 'foo' 变量名被提升. 而且 typeof foo 为 function
 var hoisted = 'foo' in this;
  console.log(`'foo' name ${hoisted ? 'is' : 'is not'} hoisted. typeof foo is ${typeof foo}`);
  if (true) {
    function foo() {
      return 1;
    }
  }

  // 在Chrome里:
  // 'foo' 变量名被提升,但是 typeof foo 为 undefined
  //
  // 在Firefox里:
  // 'foo' 变量名被提升. 但是 typeof foo 为 undefined
  //
  // 在Edge里:
  // 'foo' 变量名未被提升. 而且 typeof foo 为 undefined
  //
  // 在Safari里:
  // 'foo' 变量名被提升. 而且 typeof foo 为 function
// 函数被提升

  hoisted(); // "foo"
  function hoisted() {
    console.log('foo');
  }

  // 等价于

  var hoisted;
  hoisted = function () {
    console.log('foo');
  };
  hoisted();  // "foo"
 
// 函数表达式不会被提升

  notHoisted(); // TypeError: notHoisted is not a function
  var notHoisted = function () {
    console.log('bar');
  };

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值