javascript - jQuery Deferred Ajax,JavaScript 范围问题?

标签 javascript jquery ajax jquery-deferred

我认为这会非常简单,但它不起作用(实例在 http://jsfiddle.net/QtjaG/ ):

$.resx = function() {
    var result = this;

    return $.get("/", function() {
        result = "yo";
    });
};

var labels;

$.resx.call(labels).then(function() {
    console.log(labels);
});

因为 $.resx.call(labels) 应该将 $.resx() 中的 this 上下文设置为 labelsconsole.log(labels) 不应该记录 yo 吗?

最佳答案

在函数(“$.resx”函数)中,您将“result”设置为指代与“labels”指代的同一事物。但是,在“$.get()”的回调中,您随后将其设置为“yo”。字符串常量“yo”是一个与“labels”不同的值,实际上它一开始就没有被初始化为任何东西。在 JavaScript 中没有办法对引用的引用;如果“标签”被定义为具有某些值:

var labels = "this is a string";

那么“result”将最终成为对该字符串的另一个引用。但是,字符串是不可变的,因此在“$.get()”成功处理程序中您无法更改该字符串。

试试这个:

$.resx = function() {
    var result = this;

    return $.get("/", function() {
        result[0] = "yo";
    });
};

var labels = ["not yo"];

$.resx.call(labels).then(function() {
    console.log(labels[0]);
});

关于javascript - jQuery Deferred Ajax,JavaScript 范围问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5021242/

相关文章:

javascript - 动态导入react-icons

javascript - 使用数据类型为 HTML 的 Jquery AJAX 函数

javascript - 如何将从外部范围调用的方法 stub 到被测函数?

javascript - 在 Parse 中检索 objectId

javascript - 在以下场景中如何访问 json 数据并在 if 条件中使用?

php - 如何在不刷新页面的情况下根据选择框值从 codeigniter 中的数据库中获取值?

javascript - 如何在 ajaxSend 中正确添加数据参数?

javascript - 如何找出此 Chrome 扩展程序存储数据的位置?

javascript - 输出数组变量javascript

javascript - Rails 应用程序中文本框的 "suggest"功能