JavaScript : var scopes

标签 javascript scope

我是 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/

相关文章:

session - 如何在服务器上/同一域下的多个 ColdFusion 应用程序之间共享 SESSION?

javascript - 访问与实例变量同名的全局变量

javascript - 对象字面量方法的范围

javascript - 嗨,我在这里得到这个错误错误 : Cannot find module 'debug'

javascript - 减慢 Canvas 上图像的移动速度

javascript - 如果我们可以在 Javascript 中覆盖 undefined,那么 'void 0' 从哪里获取值呢?

javascript - 指导手动简化变量和函数的工具?

php - public 和 not function 的区别

javascript - 如何在 JavaScript 中终止或取消异步调用?

javascript - 按字母顺序对JSON排序(最后为空值)