Javascript 在文件之间共享JS函数而不使其成为全局函数或将其附加到全局对象?
假设我有一个函数,我想在多个文件之间重复使用。我可以让它全球化,但那不好 master_file.jsJavascript 在文件之间共享JS函数而不使其成为全局函数或将其附加到全局对象?,javascript,Javascript,假设我有一个函数,我想在多个文件之间重复使用。我可以让它全球化,但那不好 master_file.js add = function(num1, num2){ return num1 + num2; }; subtract = function(num1, num2){ return num1 - num2 }; add(4,4); add(9,1); subtract(8,2); var add = function(num1, num2){ return num1 +
add = function(num1, num2){
return num1 + num2;
};
subtract = function(num1, num2){
return num1 - num2
};
add(4,4);
add(9,1);
subtract(8,2);
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);
}
};
global.add(4,4);
global.add(9,1);
global.subtract(8,2);
add(4,4);
add(9,1);
subtract(8,2);
var add = global.add
add(4,4);
var add = global.add
add(9,1);
var subtract = global.subtract
subtract(8,2);
file1.js
add = function(num1, num2){
return num1 + num2;
};
subtract = function(num1, num2){
return num1 - num2
};
add(4,4);
add(9,1);
subtract(8,2);
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);
}
};
global.add(4,4);
global.add(9,1);
global.subtract(8,2);
add(4,4);
add(9,1);
subtract(8,2);
var add = global.add
add(4,4);
var add = global.add
add(9,1);
var subtract = global.subtract
subtract(8,2);
file2.js
add = function(num1, num2){
return num1 + num2;
};
subtract = function(num1, num2){
return num1 - num2
};
add(4,4);
add(9,1);
subtract(8,2);
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);
}
};
global.add(4,4);
global.add(9,1);
global.subtract(8,2);
add(4,4);
add(9,1);
subtract(8,2);
var add = global.add
add(4,4);
var add = global.add
add(9,1);
var subtract = global.subtract
subtract(8,2);
file3.js
add = function(num1, num2){
return num1 + num2;
};
subtract = function(num1, num2){
return num1 - num2
};
add(4,4);
add(9,1);
subtract(8,2);
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);
}
};
global.add(4,4);
global.add(9,1);
global.subtract(8,2);
add(4,4);
add(9,1);
subtract(8,2);
var add = global.add
add(4,4);
var add = global.add
add(9,1);
var subtract = global.subtract
subtract(8,2);
相反,我可以创建一个全局对象,并将函数作为全局对象的值附加(或者像其他对象一样附加到窗口
对象)
master_file_v2.js
add = function(num1, num2){
return num1 + num2;
};
subtract = function(num1, num2){
return num1 - num2
};
add(4,4);
add(9,1);
subtract(8,2);
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);
}
};
global.add(4,4);
global.add(9,1);
global.subtract(8,2);
add(4,4);
add(9,1);
subtract(8,2);
var add = global.add
add(4,4);
var add = global.add
add(9,1);
var subtract = global.subtract
subtract(8,2);
然后我必须像这样调用函数
file1.js
add = function(num1, num2){
return num1 + num2;
};
subtract = function(num1, num2){
return num1 - num2
};
add(4,4);
add(9,1);
subtract(8,2);
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);
}
};
global.add(4,4);
global.add(9,1);
global.subtract(8,2);
add(4,4);
add(9,1);
subtract(8,2);
var add = global.add
add(4,4);
var add = global.add
add(9,1);
var subtract = global.subtract
subtract(8,2);
file2.js
add = function(num1, num2){
return num1 + num2;
};
subtract = function(num1, num2){
return num1 - num2
};
add(4,4);
add(9,1);
subtract(8,2);
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);
}
};
global.add(4,4);
global.add(9,1);
global.subtract(8,2);
add(4,4);
add(9,1);
subtract(8,2);
var add = global.add
add(4,4);
var add = global.add
add(9,1);
var subtract = global.subtract
subtract(8,2);
file3.js
add = function(num1, num2){
return num1 + num2;
};
subtract = function(num1, num2){
return num1 - num2
};
add(4,4);
add(9,1);
subtract(8,2);
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);
}
};
global.add(4,4);
global.add(9,1);
global.subtract(8,2);
add(4,4);
add(9,1);
subtract(8,2);
var add = global.add
add(4,4);
var add = global.add
add(9,1);
var subtract = global.subtract
subtract(8,2);
有没有办法不这样调用函数?我更愿意像以前一样直接用他们的名字来称呼他们,但不要宣布他们是全球性的
file1.js
add = function(num1, num2){
return num1 + num2;
};
subtract = function(num1, num2){
return num1 - num2
};
add(4,4);
add(9,1);
subtract(8,2);
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);
}
};
global.add(4,4);
global.add(9,1);
global.subtract(8,2);
add(4,4);
add(9,1);
subtract(8,2);
var add = global.add
add(4,4);
var add = global.add
add(9,1);
var subtract = global.subtract
subtract(8,2);
file2.js
add = function(num1, num2){
return num1 + num2;
};
subtract = function(num1, num2){
return num1 - num2
};
add(4,4);
add(9,1);
subtract(8,2);
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);
}
};
global.add(4,4);
global.add(9,1);
global.subtract(8,2);
add(4,4);
add(9,1);
subtract(8,2);
var add = global.add
add(4,4);
var add = global.add
add(9,1);
var subtract = global.subtract
subtract(8,2);
file3.js
add = function(num1, num2){
return num1 + num2;
};
subtract = function(num1, num2){
return num1 - num2
};
add(4,4);
add(9,1);
subtract(8,2);
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);
}
};
global.add(4,4);
global.add(9,1);
global.subtract(8,2);
add(4,4);
add(9,1);
subtract(8,2);
var add = global.add
add(4,4);
var add = global.add
add(9,1);
var subtract = global.subtract
subtract(8,2);
如果您想避免使用globals(您应该这样做!),那么您应该查看或模块 使用模块系统将允许您执行以下操作: //utils.js
module.exports = function () {
return {
add: function (num1, num2) {
return add(num1, num2);
},
subtract: function (num1, num2) {
return subtract(num1, num2);
}
};
};
//file1.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);
使用模块使您的代码更加模块化,并使代码重用更加容易,同时保持全局范围的整洁。使用模块是可能的,但这一点已被弃用。首选的方法是将它们分配给局部变量,基本上与您在master_文件中所做的相反
file1.js
add = function(num1, num2){
return num1 + num2;
};
subtract = function(num1, num2){
return num1 - num2
};
add(4,4);
add(9,1);
subtract(8,2);
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);
}
};
global.add(4,4);
global.add(9,1);
global.subtract(8,2);
add(4,4);
add(9,1);
subtract(8,2);
var add = global.add
add(4,4);
var add = global.add
add(9,1);
var subtract = global.subtract
subtract(8,2);
file2.js
add = function(num1, num2){
return num1 + num2;
};
subtract = function(num1, num2){
return num1 - num2
};
add(4,4);
add(9,1);
subtract(8,2);
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);
}
};
global.add(4,4);
global.add(9,1);
global.subtract(8,2);
add(4,4);
add(9,1);
subtract(8,2);
var add = global.add
add(4,4);
var add = global.add
add(9,1);
var subtract = global.subtract
subtract(8,2);
file3.js
add = function(num1, num2){
return num1 + num2;
};
subtract = function(num1, num2){
return num1 - num2
};
add(4,4);
add(9,1);
subtract(8,2);
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);
}
};
global.add(4,4);
global.add(9,1);
global.subtract(8,2);
add(4,4);
add(9,1);
subtract(8,2);
var add = global.add
add(4,4);
var add = global.add
add(9,1);
var subtract = global.subtract
subtract(8,2);
哦,我明白了,哈哈。那很聪明,谢谢。我现在知道人们为什么使用
模块了。通常我会用这个,但我用的是Meteor,我意识到这可能会有冲突:啊,对不起,我不知道你用的是Meteor。不幸的是,由于整个Meteor编码风格都是围绕全局变量构建的,我认为您无法改进当前的解决方案。公平地说,我没有提到Meteor,因为我没有意识到它在共享函数时会是一个重要因素。只有当我读到你的回答时,我才意识到我需要为流星生态系统提出一个单独但类似的问题,哈哈。