访问匿名函数中声明的函数?

时间:2012-03-28 16:01:18

标签: javascript

我有一个名为bbUI.js的文件,其中包含了一些JavaScript。在该文件之外,我希望能够调用“var x = new iScroll(...)”,但我目前收到错误“ReferenceError:找不到变量:iScroll”。

(function(){
var iScroll = function (el, options) {
        var that = this,
            doc = document,
            i;

        // More code
    };
})();

据我所知,iScroll是在一个匿名函数中定义的,它本身是匿名的,但是分配给了标识符iScroll。如果这是准确的,我是否应该在我的代码中的其他地方调用“var x = new iScroll(...)”?

4 个答案:

答案 0 :(得分:4)

iScroll函数仅存在于其包含的匿名函数的范围内。要在其他地方使用它,您需要将其设置为全局。

您可以通过删除其包含的函数或通过在匿名函数中设置window.iScroll = iScroll来使其全局化。

答案 1 :(得分:3)

删除包装代码的匿名函数:

(function(){   // <- this
  ...
})();          // <- this

匿名函数可以防止该代码污染全局变量,因此iScroll仅在该匿名函数中定义。

答案 2 :(得分:1)

对这个问题的回答取决于你真正想要实现的目标以及自我执行功能的目的。无论如何..这里iScroll在自执行功能中,你必须在外面的范围内使它可用。我在下面给出了两种方法来实现这一点。

要么删除var关键字

,请将其设为全局
(function(){
 iScroll = function (el, options) {
        var that = this,
            doc = document,
            i;

        this.show = function(){
           alert("hello world");
        }
    };

})();

或在外部添加变量iScroll并返回函数。

var iScroll = (function(){
       return function (el, options) {
            var that = this,
                doc = document,
                i;

            this.show = function(){
               alert("hello world");
            }
        };
})();

测试

var iscroll = new iScroll();
iscroll.show();

答案 3 :(得分:1)

另一种选择可能如下:

var iScroll = (function(){ 

     var iScroll = function (el, options) {
     };

     return iScroll; // <-- add this line

})();