• 闭包的应用(私有变量、珂理化、偏函数)


    一、私有变量

    1. 迭代器

    const countModule = (function () {
      let count = 0;
    
      function addCount() {
        count++;
        return count;
      }
    
      function toZero() {
        count = 0;
        return count;
      }
      return {
        addCount,
        toZero
      }
    })();
    countModule.addCount(); // 1
    countModule.addCount(); // 2
    countModule.addCount(); // 3
    countModule.toZero(); // 0
    countModule.addCount(); // 1
    countModule.addCount(); // 2
    countModule.addCount(); // 3
    

    2. 存取器

    const myNameModule = (function () {
      let name = "Mike";
    
      function getName() {
        return name;
      }
    
      function setName(value) {
        name = value;
        return name;
      }
    
      return {
        getName,
        setName
      }
    })();
    myNameModule.getName(); // 'Mike'
    myNameModule.setName('Helen'); // 'Helen'
    

    3. 模块化

    const User = (function () {
      let _password; // 定义私有变量
    
      class User {
        constructor(username, password) {
          // 初始化私有变量
          _password = password;
          this.username = username;
        }
    
        login() {
          console.log(`用户名:${this.username}, 密码:${_password}`);
        }
      }
    
      return User;
    })();
    let user = new User('mike', 'mike123');
    console.log(user.username); // 'mike'
    console.log(user.password); // undefined
    login(); // 'mike' 'mike123'
    

    二、珂理化函数

    柯里化是把接受 n 个参数的 1 个函数改造为只接受 1个参数的 n 个互相嵌套的函数的过程。也就是fn(a, b, c)会变成fn(a)(b)(c)

    function personalInfo(school) {
      return function (grade) {
        return function (profession) {
          return `学校:${school} 年级:${grade} 专业:${profession}`;
        }
      }
    }
    // 生成江苏师范大学科文学院专属函数
    const schoolName = personalInfo('江苏师范大学科文学院');
    // 记住school,生成学校的年级专属函数
    let gradeName = schoolName('大学三年级');
    // 记住了school和grade,生成学校对应年级的专业专属函数
    let professionName = gradeName('某某专业');
    console.log(professionName);
    

    三、偏函数

    和珂理化的区别是,不再强调单函数。例如1个入参返回2个入参函数。

    function personalInfo2(school) {
      return function (grade, profession) {
        return `学校:${school} 年级:${grade} 专业:${profession}`;
      }
    }
    const schoolName2 = personalInfo2('江苏师范大学科文学院');
    let gradeAndprofessionName = schoolName2('大学一年级', '设计专业');
    console.log(gradeAndprofessionName);
    
  • 相关阅读:
    DOM
    笔试题
    小案例
    前端基础面试题
    2048小游戏
    JS原型与构造函数
    String字符串和正则表达式
    数组
    MySQL_PHP学习笔记_2015_0906_使用PHP模板
    MySQL_PHP学习笔记_2015_0614_PHP传参总结_URL传参_表单传参
  • 原文地址:https://www.cnblogs.com/buildnewhomeland/p/13125383.html
Copyright © 2020-2023  润新知