javascript - 在文件之间共享 JS 函数而不使它们成为全局对象或将它们附加到全局对象?

标签 javascript

假设我有一个函数,我想在多个文件之间重复使用。我可以让它全局化,但这并不好。

ma​​ster_file.js

add = function(num1, num2){
  return num1 + num2;
};

subtract = function(num1, num2){
  return num1 - num2
};

file1.js

add(4,4);

file2.js

add(9,1);

file3.js

subtract(8,2);

相反,我可以创建一个全局对象并将函数附加为全局对象的值(或像其他人那样附加到 window 对象)。

ma​​ster_file_v2.js

var add = function(num1, num2){
  return num1 + num2;
};

var subtract = function(num1, num2){
  return num1 - num2
};

global = {

  add: function(num1, num2){
    return add(num1, num2);
  },
  subtract: function(num1, num2){
    return subtract(num1, num2);
  }

};

然后我将不得不像这样调用函数。

file1.js

global.add(4,4);

file2.js

global.add(9,1);

file3.js

global.subtract(8,2);

有没有办法像这样调用函数?我宁愿像以前一样直接通过它们的名字来调用它们,但不将它们声明为全局的。

file1.js

add(4,4);

file2.js

add(9,1);

file3.js

subtract(8,2);

最佳答案

如果你想避免使用全局变量(你应该!),你应该看看 CommonJSHarmony模块。

使用模块系统可以让你做这样的事情:

//utils.js

module.exports = function () {
  return {
    add: function (num1, num2) {
      return add(num1, num2);
    },
    subtract: function (num1, num2) {
      return subtract(num1, num2);
    }
  };
};

//文件1.js

var add = require('./utils').add;
var subtract = require('./utils').subtract;

add(4,4);
subtract(8,2);

或者使用 Harmony 的解构功能会更好:

var {add, subtract} = require('./utils');

add(4,4);
subtract(8,2);

使用模块可以使您的代码更加模块化,并使代码重用变得容易,同时保持您的全局范围干净。

关于javascript - 在文件之间共享 JS 函数而不使它们成为全局对象或将它们附加到全局对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31030013/

相关文章:

javascript - JQRangeSlider 自定义边界未设置

javascript - 如何生成批量二维码

Javascript 和 jQuery 在 xampp 的 htdocs 文件夹中不起作用

javascript - 什么是 oncontentready 事件?

javascript - Cufon 字体替换 : How can I eliminate the flash of unstyled text that occurs when the page loads?

javascript - Colvis javascript 在数据表和 yadcf 中为工具栏 ui 创建问题

Javascript 按钮播放随机声音

javascript - ajaxStop 在 jQuery 的 Click 事件中

javascript - CodeMirror 在使用自定义 css 行高粘贴时呈现错误

javascript - Qtip2 未显示