在函数外部访问函数中定义的变量

时间:2018-03-22 12:02:30

标签: javascript jquery backbone.js

我有一个backbone.js项目。我在里面使用jquery $ get函数。我正在改变get中定义的变量的值。但是当我在外面做console.log(cityValue)时,我看到了旧的价值。你可以帮帮我吗?我期待着你的想法。

示例代码;

getFormattedAddress1: function () {            
        var postalCodeValue = this.model.get(this.postalCodeField);
        var streetValue = this.model.get(this.streetField);
        var cityValue = this.model.get(this.cityField);
        var stateValue = this.model.get(this.stateField);
        var countryValue = this.model.get(this.countryField);            

        $.get("Target/action/city", { id : cityValue },function(data){
            cityValue = data.name;
        });

        console.log(cityValue);

        var html = '';
        if (streetValue) {
            html += streetValue;
        }
        if (cityValue || stateValue || postalCodeValue) {
            if (html != '') {
                html += '\n';
            }
            if (cityValue) {
                html += cityValue;
            }
            if (stateValue) {
                if (cityValue) {
                    html += ', ';
                }
                html += stateValue;
            }
            if (postalCodeValue) {
                if (cityValue || stateValue) {
                    html += ' ';
                }
                html += postalCodeValue;
            }
        }
        if (countryValue) {
            if (html != '') {
                html += '\n';
            }
            html += countryValue;
        }
        return html;
    },

1 个答案:

答案 0 :(得分:1)

jQuery的get正在执行异步请求 - 这意味着在function(data) { ... }的网络请求完成后将执行回调Target/action/city。不在回调内部的其余代码将在不等待网络请求完成的情况下执行。

基本上,console.log(cityValue);会在cityValue = data.name;之前运行,因此您会看到旧值。

尝试将console.log(cityValue);置于回调函数中。