访问不在范围内的函数

时间:2015-05-06 03:01:15

标签: javascript jquery function scope

我有以下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

我正在尝试调用一个不在范围内的函数。我怎么能打电话呢?

3 个答案:

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