美文网首页
六、函数定义

六、函数定义

作者: 帅气的Lucky | 来源:发表于2021-09-21 20:18 被阅读0次

一、函数的定义

JavaScript三种定义函数方法:

1、第一种 使用function语句定义函数

myFunction(5);
function myFunction(y) {
    return y * y;
}

2、第二种 使用Function()构造函数来定义函数(不常用)

var 函数名 = new Function(“参数1”,”参数2”,”参数3”……”函数体”);
如:
var 函数名 = new Function("x","y","var z=x+y;return z;");

3、第三种 函数表达式

JavaScript 函数可以通过一个表达式定义。

函数表达式可以存储在变量中:

var 函数名 = function(参数1,参数2,…){函数体};
//例如:
//定义
    var add = function(a,b){
        return a+b;
    }
    //调用函数
    document.write(add(50,20));

4、第四种 自调用函数

  • 概述

    • 函数表达式可以 "自调用"。

    • 自调用表达式会自动调用。

    • 如果表达式后面紧跟 () ,则会自动调用。

    • 不能自调用声明的函数。

    • 通过添加括号,来说明它是一个函数表达式:

  • 实例:

    (function () {
        var x = "Hello!!";      // 我将调用自己
    })();
    
  • 注意:

    arguments 对象

    在函数代码中,使用特殊对象 arguments,开发者无需明确指出参数名,就能访问它们。
    例如,在函数 sayHi() 中,第一个参数是 message。用 arguments[0]
    也可以访问这个值,即第一个参数的值(第一个参数位于位置 0,
    第二个参数位于位置 1,依此类推)。

    • 例如:arguments

      x = sumAll(1, 123, 500, 115, 44, 88);
      
      function sumAll() {
          var i, sum = 0;
          for (i = 0; i < arguments.length; i++) {
              sum += arguments[I];
          }
          return sum;
      }
      
  • 关于变量和参数问题:

    • 函数外面定义的变量是全局变量,函数内可以直接使用
    • 在函数内部没有使用var定义的=变量则为全局变量
    • 在函数内使用var关键字定义的变量是局部变量,即出了函数外边无法获取。
      函数支持默认值
    • 在函数内部定义的函数为局部函数 在函数外部不能获取到

二、JavaScript 闭包

1、概述

  • JavaScript 变量可以是局部变量或全局变量。
  • 私有变量可以用到闭包
  • 函数内部可以修改函数外部的全局变量

2、计数器困境

设想下如果你想统计一些数值,且该计数器在所有函数中都是可用的。

你可以使用全局变量,函数设置计数器递增:

var counter = 0;
 
function add() {
   return counter += 1;
}
 
add();
add();
add();
 
// 计数器现在为 3

但问题来了,页面上的任何脚本都能改变计数器,即便没有调用 add() 函数。

如果我在函数内声明计数器,如果没有调用函数将无法修改计数器的值:

function add() {
    var counter = 0;
    return counter += 1;
}
 
add();
add();
add();
// 本意是想输出 3, 但事与愿违,输出的都是 1 !

3、JavaScript 内嵌函数

所有函数都能访问全局变量。

实际上,在 JavaScript 中,所有函数都能访问它们上一层的作用域。

JavaScript 支持嵌套函数。嵌套函数可以访问上一层的函数变量。

该实例中,内嵌函数 plus() 可以访问父函数的 counter 变量:

实例:

function add() {
    var counter = 0;
    function plus() {counter += 1;}
    plus();    
    return counter; 
}

4、JavaScript 闭包

var add = (function () {
    var counter = 0;
    return function () {return counter += 1;}
})();
 
add();
add();
add();
 
// 计数器为 3
  • 实例解析

    变量 add 指定了函数自我调用的返回字值。

    自我调用函数只执行一次。设置计数器为 0。并返回函数表达式。

    add变量可以作为一个函数使用。非常棒的部分是它可以访问函数上一层作用域的计数器。

    这个叫作 JavaScript 闭包。它使得函数拥有私有变量变成可能。

    计数器受匿名函数的作用域保护,只能通过 add 方法修改。

[图片上传失败...(image-2de9e1-1632226684012)] 闭包是可访问上一层函数作用域里变量的函数,即便上一层函数已经关闭。
闭包就是一个函数引用另一个函数的变量,因为变量被引用着所以不会被回收,因此可以用来封装一个私有变量。这是优点也是缺点,不必要的闭包只会增加内存消耗。 或者说闭包就是子函数可以使用父函数的局部变量,还有父函数的参数。

相关文章

  • 六、函数定义

    一、函数的定义 JavaScript三种定义函数方法: 1、第一种 使用function语句定义函数 2、第二种 ...

  • python的学习笔记6

    六、函数 1.定义函数 最简单定义函数的方法就是使用def()语句。如: def 函数名(参数列表): 函数体 任...

  • 六、函数定义、用法以及函数注释

    Swift函数 Swift函数的定义 有返回值的函数 无返回值的函数 上面三种本质上是一样的∵Void即为空元祖的...

  • 函数

    定义:具有特定功能的代码段 函数可分为:①库函数②自定义函数 函数定义:在 main函数 外面定义 自定义函数还可...

  • Kotlin Function vs Lambda

    函数定义方式: Lambda定义方式: 高阶函数定义: 高阶函数使用:

  • Swift第二周学习总结

    第六天 集合 1.集合的定义 2.集合的相关应用 字典 1.字典的定义 2.字典的相关应用 函数 1.定义函数 2...

  • 廖雪峰的JS教程2.1-函数

    函数 函数的定义和调用 定义函数 上述abs()函数的定义如下: function指出这是一个函数定义; abs是...

  • 深入理解JavaScript函数

    JavaScript中的函数 1. 函数的定义 两种定义形式:通过函数定义表达式来定义通过函数声明语句来定义 函数...

  • JS 函数

    函数有三种定义方式 函数声明 函数表达式 函数实例化 区别: 函数声明定义特点:函数定义会被前置;重复定义函数时,...

  • kotlin<第二篇>:类与继承

    一、类的定义 二、构造函数 三、继承 四、get 和 set 函数 五、延迟初始化 六、接口 六、可见性修饰符 七...

网友评论

      本文标题:六、函数定义

      本文链接:https://www.haomeiwen.com/subject/zldsgltx.html