假设我有一个函数,我想在多个文件之间重复使用。我可以让它全局化,但这并不好。
master_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
对象)。
master_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);
最佳答案
如果你想避免使用全局变量(你应该!),你应该看看 CommonJS或 Harmony模块。
使用模块系统可以让你做这样的事情:
//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/