我有以下javascript代码:
(function($){
function JsBarcode(){
//Some Code Here
}
})(window.jQuery);
(function ($) {
JsBarcode();
//calls a JsBarcode not within a scope
})(jQuery);
运行上面的代码时,会出现以下错误:
Uncaught ReferenceError: JsBarcode is not defined
我正在尝试调用一个不在范围内的函数。我怎么能打电话呢?
答案 0 :(得分:2)
这是因为JsBarcode
在匿名函数中声明,所以它只在声明它的匿名函数的有限范围内可用。
一种可能的解决方案是将声明移到匿名函数之外
另一个是使用全局变量来存储对函数的引用,如下所示
//declare it as a gloal variable
var JsBarcode;
(function ($) {
//assign the value of JsBarcode as the function
JsBarcode = function () {
//Some Code Here
}
})(window.jQuery);
(function ($) {
JsBarcode();
//calls a JsBarcode not within a scope
})(jQuery);
答案 1 :(得分:2)
2个选项: - 更改结构,使第二个模块位于第一个模块内:父范围始终可见。 - 您更改导出该功能的第一个模块,以便您可以在外部访问它。
下面的样本
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
{{1}}
答案 2 :(得分:1)
如果你不想杂乱全局命名空间也可以使它成为jQuery的一个属性...一个迷你插件
(function($){
// assign to $ namespace
$.JsBarcode = function (){
//Some Code Here
}
})(window.jQuery);
(function ($) {
// call jQuery.JsBarcode()
$.JsBarcode();
})(jQuery);