-1

您好我正在扩展现有插件以使用静态 JSON,而不是从服务器加载它。这是扩展的精简版本:

(function ($) {
    $.fn.MyExtension = function (options) {
        return this.each(function () {
            if (opts.load_Json) {
                $.get("", function (result) {
                    fromJson(opts.load_Json)
                });
            }

            var fromJson = function (json) {
                    // json stuff..
                 }  
        });
});

如果我在没有回调的情况下直接删除$.Getand 调用,我会收到一条错误消息,指出未定义。这一定是某种形式的范围问题,但我无法解决?fromJsonfromJson

4

1 回答 1

5

这不是范围。这是时机。

fromJson直到您传递给的匿名函数结束时才会分配函数each

如果您从get回调中调用它,那么该分配将在 HTTP 响应返回并且函数触发之前发生。

如果你直接调用它,那么它还不存在。

重新排序:

    return this.each(function () {
        var fromJson = function (json) {
                // json stuff..
             }  

        if (opts.load_Json) {
            $.get("", function (result) {
                fromJson(opts.load_Json)
            });
        }

    });

或使用函数声明(将受到提升):

    return this.each(function () {
        if (opts.load_Json) {
            $.get("", function (result) {
                fromJson(opts.load_Json)
            });
        }

        function fromJson (json) {
                // json stuff..
             }  
    });
于 2013-05-16T08:57:22.003 回答