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

  显示原文与译文双语对照的内容
0 0

假设我有一个函数,我想在多个文件之间使用。 我可以把它变成全局的但那并不合适。

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);

 
时间: 原作者:

0 0

是的你的所有JS方法和对象都保存在浏览器中。 所以你不需要关心"作用域",因为它们都在相同的范围/命名空间中。 如果只在. js 文件中声明和定义方法,而不是在对象的inside 中定义方法,则。 例如:


//start of. js file
function add(val1, val2) {
 return val1+val2;
}
//end of. js file

还有你的其他剧本:


//start of other. js file
function test(){
 console.log(add(1, 2));
} 
//end of other. js file

你只需要注意,第一个"js文件"是在其他js文件之前加载的。 因为JS在运行时被解释,所以脚本需要知道方法定义才能使用它。

我没有测试但是应该能

原作者:
0 0

这是可以使用,但这是不推荐的。 首选方法是将它们分配给局部变量,基本上是你在master_file中所做

file1.js


var add = global.add
add(4,4);

file2.js


var add = global.add
add(9,1);

file3.js


var subtract = global.subtract
subtract(8,2);

原作者:
0 0

如果你想避免使用全局( 你应该),你应该看一下 CommonJS或者和谐的模块。

使用 MODULE 系统将允许你执行如下操作:

//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);

或者,使用协调功能的destructuring更好:


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

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

使用模块使代码更加模块化,并且使代码重用更加容易,同时保持全局范围的整洁。

...