在JQuery函数中使用变量

时间:2012-04-14 00:56:30

标签: javascript jquery

我有一个关于在jQuery中访问变量的简单问题。当我在点击'a'时调用read函数时,是否有办法访问变量(换行)。

(function() {
    var Example= {
        init: function() {
            var wrap = 'hello world';
            $('a').on('click', this.read);
        },

        read: function() {
            console.log(wrap)
        }
    };

    Example.init();
})();

6 个答案:

答案 0 :(得分:3)

(function() {
    var wrap;
    var Example= {
        init: function() {
            wrap = 'hello world';
            $('a').on('click', this.read);
    ...

因为函数可以访问从定义范围可见的所有变量。

答案 1 :(得分:3)

有几种方法可以实现这一目标。也许最简单的方法是更改​​'wrap'变量的范围。目前,由于它在init函数内部使用var声明,因此它的作用域为init函数,并且不能直接在init之外使用。所以,你可以在init之外声明'wrap'(它可能是'Example'对象的属性):

    var Example= {
        wrap: 'hello world',
        init: function() {
            var self = this;
            $('a').click(function(){
                self.read();
            });
        },

        read: function() {
            console.log(this.wrap);
        }
    };

    ​Exa​mple.init();

这使'wrap'作用于'Example',并在'Example'中定义的任何函数中作为'Example'的属性提供。

(编辑:必须稍微调整一下才能正确处理闭包。)

答案 2 :(得分:0)

(function() {
    var Example= {
        init: function() {
            this.wrap = 'hello world';
            $('a').on('click', this.read);
        },
        read: function() {
            console.log(this.wrap)
        }
    };
    Example.init();
})();

答案 3 :(得分:0)

试试这个:(小提琴:http://jsfiddle.net/jRJFQ/3/

(function(){
    var Example= {
        wrap:null,
         init: function() {
            this.wrap = 'hello world';
            $('a').on('click', this.read);
         },

        read: function() {
            console.log(Example.wrap)
        }
    };
    Example.init();
}​)();​

答案 4 :(得分:0)

如果您考虑使用揭示模块模式,您可以定义哪些变量是私有的,哪些变量是公共的,如下所示:

var Example = (function(){

    var wrap = 'hello world',
        init = function(){
            ...
        },
        read = function(){
            ... // You can use `wrap` here
        };

    return { // Return public variables and methods
        init: init,
        read: read
    };

})();

Example.init();

答案 5 :(得分:-1)

是的,应该这样做:

(function() {
    var wrap;
    var Example= {
        init: function() {
            var wrap = 'hello world';
            $('a').on('click', this.read);
        },

        read: function() {
            console.log(wrap)
        }
    };

    Example.init();
})();