我认为这会非常简单,但它不起作用(实例在 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
上下文设置为 labels
,console.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/