我是 JavaScript 的初学者..
有人可以解释一下为什么这不起作用吗?
以及如何让它发挥作用?
function getResults(keywords) {
foo.foo = function() {
var bar = foo.getSomeText; // Contain "blabla"
};
return bar;
}
// Globale scope
alert(bar); // Do nothing
编辑(抱歉缺少信息):
那是因为我想从 xhr 请求返回一些文本,并且我必须使用一个函数来使用 onreadystatechange 事件.. 这是原始代码:
function getResults(keywords) {
// Effectue une requête et récupère les résultats
var xhr = new XMLHttpRequest();
xhr.open('GET', './autoc.php?s='+ encodeURIComponent(keywords));
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
var response = xhr.responseText;
var test = response.split('|');
}
};
xhr.send(null);
return test;
}
var hum = getResults('test');
console.log(hum);
最佳答案
这应该有效
var bar;
var foo = {getSomeText : 'blabla'};
function getResults(keywords) {
foo.foo = (function() {
return bar = foo.getSomeText; // Contain "blabla"
})();
return bar;
}
// Globale scope
bar = getResults('hi');
alert(bar); // Do nothing
<强> Fiddle
- 由于语法错误,您的初始代码将无法工作,因为 bar 不是 已定义。
- foo 在这里是一个对象,甚至还没有定义。所以你需要 创建对象。
getResults
返回 bar,如果满足以下条件,则可以在函数内重新定义该 bar 您显式执行该函数并需要将其分配给 全局范围内的变量 bar。
更新
AJAX 是异步的,您正尝试从回调函数中设置的函数返回值。 因为请求是异步的,所以函数在到达回调函数时已经返回。所以在第二种情况下 test 将始终是未定义的
关于JavaScript : var scopes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13365911/