我认为这很简单,但它不起作用(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)
应将this
内容设置为$.resx()
至labels
,因此console.log(labels)
不应该yo
?
答案 0 :(得分:2)
在函数(“$ .resx”函数)中,您设置“result”以引用“labels”所指的相同内容。但是,在“$ .get()”的回调中,您将其设置为“yo”。字符串常量“yo”是不同的值而不是“标签”,实际上它并没有初始化为任何东西。在JavaScript中没有办法让引用引用;如果“标签”被定义为具有某些价值:
var labels = "this is a string";
然后“结果”最终会成为对该字符串的另一个引用。但是,字符串是不可变的,因此从“$ .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]);
});
答案 1 :(得分:0)
如果你是console.log(这个),你会得到一个窗口。那是因为你的函数范围是全局的。我认为您正在寻找的是“应用”方法:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/function/apply。但是我不认为你需要它,因为你可以在下面简单地做。 callBack函数的闭包将围绕“labels”引用。因为函数是一等对象,你可以直接作为委托传递它们并像callBack(x)一样调用它们;
$.resx = function(callBack) {
return $.get("/", function() {
callBack("yo");
});
};
var labels;
$.resx(function(response){
labels = response;
});