Использование функций вне функции IIFE
У меня есть следующий метод, он находится внутри someFile.js:
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define(['b'], factory);
} else if (typeof exports === 'object') {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require('b'));
} else {
// Browser globals (root is window)
root.returnExports = factory(root.b);
}
}(this, function (b) {
//use b in some fashion.
// Just return a value to define the module export.
// This example returns an object, but the module
// can return a function as the exported value.
b.isValid = function(parameter){
if (!isString(parameter)){
return false;
}
parameter = this.newFormat(parameter);
return parameter;
};
}));
Как функция IIFE, она будет вызывать себя автоматически, но затем, что я хочу сделать в отдельном файле JavaScript, это использовать этот метод, что-то вроде:
b.isValid('value to test');
Это возможно? Или как лучше всего получить доступ к этим функциям или вызвать их из-за пределов этой функции IIFE?
Заранее спасибо.
1 ответ
Вы можете вернуть некоторое значение из заводской функции, которая затем будет присвоена exports
объект или корень (или что-то еще)...
Например, module.js
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define(['dependency'], factory);
} else if (typeof exports === 'object') {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require('dependency'));
} else {
// Browser globals (root is window)
root['identifier']= factory(root['dependency']);
}
})(this, function (dep) {
// Just return a value to define the module export.
// This example returns an object, but the module
// can return a function as the exported value.
return {
fn: function(){
console.log([].slice.call(arguments))
}
}
});
index.html
<script src="module.js"></script>
<!-- Module will be executed in the global context and it's value will be assigned to the window object -->
<script>
// can access the module's export here
window['identifier'].fn('something', 'goes', 'here')
// or, preferred way would be: identifier.fn('something', 'goes', 'here')
</script>
или внутри some_other_module.js
// CommonJS
var depX = require("./module.js") // can omit .js extension
depX.fn('something', 'goes', 'here')
// es6
import depX from "./module.js" // can omit .js extension
depX.fn('something', 'goes', 'here')