无法更新函数内的变量

时间:2013-11-04 13:36:56

标签: javascript jquery parse-platform

我正在尝试使用函数的结果更新变量,因此可以在别处引用它,但它不会更新。

var total = 0;

mainQuery.count({
    success: function (number) {
        console.log("results",number);
        total = number;
    }
});

console.log("total is",total);

// console output:
// results 164
// total is 0

这样做的正确方法是什么?

5 个答案:

答案 0 :(得分:4)

据我所知,您的mainQuery.count()函数是异步的,并且一旦它结束运行就会运行success回调。但是,在registring回调后调用console.log(),但在成功函数结束运行后不调用console.log()。你应该做的是在成功回调后运行var total = 0; mainQuery.count({ success: function (number) { console.log("results",number); total = number; myFn(); } }); function myFn() { console.log("total is",total); }

{{1}}

答案 1 :(得分:4)

正如@Blazemonger所说,success可能是一个异步函数。 console.log("total is",total);的输出可能会在成功之前呈现,甚至会为total分配值

答案 2 :(得分:1)

此代码应该以这种方式工作。 结账“关闭”这就是你在做什么。简而言之,闭包意味着您正在从另一个上下文中访问变量。

这基本上是一回事:

<script>
var test = 0;
setTimeout(function() { test = 10; }, 1000);
</script>

它有效。 ^^

您的问题可能是,在异步函数返回之前访问变量

答案 3 :(得分:1)

在不知道变量total的整体范围的情况下,很难回答,但要涵盖所有基础,你可以做到这一点......

window.total = 0;

mainQuery.count({
    success: function (number) {
        console.log("results",number);
        window.total = number;
    }
});

console.log("total is", window.total);

答案 4 :(得分:1)

var total = 0;

mainQuery.count({
    success: function (number) {
        console.log("results",number);
        total = number;
        console.log("total is",total);
    }
});

//The code you had here is executed before the async-call is done. So it hasnt updated total with the value yet.

// console output:
// results 164
// total is 0