【问题标题】:What does the parenthesis after an expression function in javascript do? [duplicate]javascript中表达式函数后的括号有什么作用? [复制]
【发布时间】:2022-07-06 04:43:59
【问题描述】:

我在 NodeJS 上有这个模块:

const { cloneDeep, mapValues } = require('lodash');

module.exports = function(Sequelize) {
  return new ( function(Sequelize) {
    /* Preserve this pointer into forEach callbacks scope */
    var self = this;

    this.types = {
      'string'  : Sequelize.STRING,
      'text'    : Sequelize.TEXT,
      'integer' : Sequelize.INTEGER,
      'int'     : Sequelize.INTEGER,
      'decimal' : Sequelize.DECIMAL,
      'date'    : Sequelize.DATE,
      'boolean' : Sequelize.BOOLEAN,
    };

    /* Convert the Agence model Syntax to Sequelize syntax */

    this.parse = function(model) {

      /* Convert model Agence attributes to Sequelize types attribs */
      function toSequelizeTypes(attributes) {
        return mapValues(attributes, function(attribute) {
          var attribSettings    = cloneDeep(attribute);
          attribSettings.type   = self.types[attribSettings.type];
          return attribSettings
        });
      }

      return {
        tableName: model.tableName,
        attributes : toSequelizeTypes(model.attributes),
        hooks : model.hooks || {},
        classMethods : model.classMethods || {},
        instanceMethods : model.instanceMethods || {}
      };
    };

  })(Sequelize);
};

如您所见,return new 之前的括号关闭,然后是 (Sequelize) 部分,在此结束并最终关闭导出的 main 函数。 (Sequelize) 的事情是做什么的?我以前从未见过这种sintaxis。

【问题讨论】:

    标签: javascript node.js function sequelize.js parentheses


    【解决方案1】:

    这是IIFE。这是一个创建并内联运行的函数。

    续集只是一个论据

    可以这样写

    return new init(Sequelize);
    
    function init(Sequelize) {
        /* Preserve this pointer into forEach callbacks scope */
        var self = this;
    
        this.types = {
          'string'  : Sequelize.STRING,
          'text'    : Sequelize.TEXT,
          'integer' : Sequelize.INTEGER,
          'int'     : Sequelize.INTEGER,
          'decimal' : Sequelize.DECIMAL,
          'date'    : Sequelize.DATE,
          'boolean' : Sequelize.BOOLEAN,
        };
    
        /* Convert the Agence model Syntax to Sequelize syntax */
    
        this.parse = function(model) {
    
          /* Convert model Agence attributes to Sequelize types attribs */
          function toSequelizeTypes(attributes) {
            return mapValues(attributes, function(attribute) {
              var attribSettings    = cloneDeep(attribute);
              attribSettings.type   = self.types[attribSettings.type];
              return attribSettings
            });
          }
    
          return {
            tableName: model.tableName,
            attributes : toSequelizeTypes(model.attributes),
            hooks : model.hooks || {},
            classMethods : model.classMethods || {},
            instanceMethods : model.instanceMethods || {}
          };
        };
    
      }
    

    【讨论】:

      猜你喜欢
      • 2011-01-26
      • 2020-02-15
      • 2017-10-04
      • 2011-08-14
      • 2019-07-14
      相关资源
      最近更新 更多