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

Javascript 在函数外部访问函数中定义的变量,javascript,jquery,backbone.js,Javascript,Jquery,Backbone.js,我有一个backbone.js项目。我在内部使用jquery$get函数。我正在更改上面在get中定义的变量的值。但是当我在外面做console.log(cityValue)时,我看到了旧的值。你能帮我吗?我期待着您的意见 样本代码 getFormattedAddress1: function () { var postalCodeValue = this.model.get(this.postalCodeField); var stree

我有一个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;
    },

jQuery的get正在执行一个异步请求——这意味着对
Target/action/city
的网络请求完成后,将执行回调
function(data){…}
。回调中未包含的其余代码将在不等待网络请求完成的情况下执行

所以基本上,
console.log(cityValue)
cityValue=data.name之前运行因此您看到的是旧值


尝试放置
console.log(cityValue)在回调函数中。

$.get()
是异步的。甚至在get请求完成之前,您就已经在控制台中记录了该变量。尝试执行依赖于
$.get().done()
中的
cityValue
的代码。没用,但你看。在我的代码中,它们都只在一个函数中。它们都在一个函数中并不重要(从技术上讲,您有两个函数:
getFormattedAddress1
$.get
回调)
$.get
是异步的,因此在执行
$.get
之后的代码之前,不会执行其回调。你必须把它翻过来并使用回调。不,我不想在里面使用它。Console.log(cityValue)就是用来测试的。