javascript-函数中变量的JS可见性

我使用JSON,我想计算响应中的元素数量.

    $.getJSON("/api/getEvents", function(data) {
        $.each(data, function(key, event) {
            var count = 10;
            $.getJSON("/api/getUsers", function(data) {
                $.each(data, function(key, event) {
                    alert("Value: " + count);
                    count++;
                });
            });
            alert("Count: " + count);
        });
    });

结果,我得到:

Value: 10
Value: 11
Value: 12
...
Count: 10

为什么计数= 10?

解决方法:

这是因为ajax请求是异步的. $.getJSON只是发起一个请求,但是javascript执行立即继续.如果将警报移动到ajax回调中,则可以看到计数:

$.getJSON("/api/getEvents", function(data) {
    $.each(data, function(key, event) {
        var count = 10;
        $.getJSON("/api/getUsers", function(data) {
            $.each(data, function(key, event) {
                alert("Value: " + count);
                count++;
            });

            // I moved this here:
            alert("Count: " + count);
        });
        // It used to be here.
    });
});

因此,在将var count设置为10之后,javascript解析器将运行$.getJSON,但随后会立即转到下一行,在您的代码示例中,该行会警告“ Count:10”.然后,每当请求完成时,它都会运行回调代码,该代码将增加计数并提醒“值”行.

上一篇:正则表达式中的PHP变量?


下一篇:如何在具有单引号和双引号的JavaScript变量中存储字符串?