Javascript函数范围

时间:2012-07-04 10:14:41

标签: javascript requirejs

我需要调用函数bar。我是新手使用回调,据我所知,回调仍然在ajax的范围内,所以它看不到bar。是否有可能在ajax成功时调用bar? bar在模块top中定义。

define(["top"], function() {
    function foo(callback) {
        $.ajax({
            type: "GET",
            cache: false,
            dataType: 'json',
            url: "http://asdf/qwer",
            success: function(response) {
                callback(response);
            }
        });
    }
    foo(function(response) {
        bar(response);      
    });
});

1 个答案:

答案 0 :(得分:2)

假设您的top.js看起来与此相似:

define( function() {
  return {
    'bar': function( data ){
             // some code here
           }
  };
} );

(注意,这里必须导出/返回该功能!)

您可以像这样访问bar()功能:

define(["top"], function( top ) {
    function foo(callback) {
        $.ajax({
            type: "GET",
            cache: false,
            dataType: 'json',
            url: "http://asdf/qwer",
            success: function(response) {
                callback(response);
            }
        });
    }
    foo(function(response) {
        top.bar(response);      
    });
});

请参阅require.js doc on working with dependencies inside a define() function

您应该为define()内的每个必需模块的函数添加一个参数。在示例中,这是top参数。然后,您可以使用此参数调用需求模块的所有导出属性。