如何从jQuery变量到函数?

Mar*_*tin 1 javascript variables jquery scope

但出于某种原因,当我把可变数据变成顽皮时,它没有数据内容.

function cookie() {
    var naughty = 'aaa';
    $.post('/cookie', function(data) {
        naughty = data;
    });
    alert(naughty); // sends "aaa"
}
Run Code Online (Sandbox Code Playgroud)

为什么?

更新:谢谢!现在我明白了,因为$ .post()是异步的,所以在充满数据之前会执行alert(顽皮).

现在我有一个小问题:当我关闭异步,只会运行cookie()推迟执行或整个浏览器引擎将冻结,直到AJAX完成?

更新2:是的,@凯文B,你说得对,顽皮永远不会被填充......我在第一个代码示例中犯了错误.我很幸运所有答案都是有效的,只有第二个代码示例:-)

正如@Kevin B所指出的,async = false将在jQuery 1.8中折旧.并冻结浏览器直到请求完成...

子问题#2:在此AJAX请求之后,我在cookie()中有更多代码.那么,我可以以某种方式暂停执行cookie()直到AJAX完成,而不用使用async = false冻结整个浏览器?或者我是否必须找到编写这个想法的新方法(使用完整/成功回调)?

最后编辑:我意识到我想要的是ASYNC:FALSE ......所以我只是用它.BTW.ASYNC:FALSE不会从jQuery中删除!只有特殊的用例才会......

Ace*_*ban 10

这是竞争条件.由于.post()是一个异步函数,因此在淘气重置为数据之前执行警报.

如果希望响应在继续之前返回,则可以使用.ajax并将async设置为false.

如何在jQuery异步工作中停止$ .post?