if语句中的局部变量javascript

时间:2015-12-10 17:15:42

标签: javascript

var request = require('request');
var cheerio = require('request');
var eval = "5555";

request('http://google.com', function (error, response, body) {
    if (!error && response.statusCode == 200) {
        var keys = body.split(",");
        eval = keys[0]; // Think keys[0] is 7777
// and no problem in if statement, it must be excuted.
    }
})

console.log("evalue :"+eval);
// result ---> 5555  

为什么结果是5555?不是7777?我认为eval是全局值,if语句会将eval值更新为7777,我认为结果将是7777但我意识到它没有。谁能告诉我为什么。对不起,类似的问题。

3 个答案:

答案 0 :(得分:2)

request中的回调是异步

因此,当您调用console.log时,它会在执行request回调之前。尝试登录回调本身

request('http://google.com', function (error, response, body) {
    if (!error && response.statusCode == 200) {
        var keys = body.split(",");
        eval = keys[0]; // Think keys[0] is 7777
        console.log("evalue :"+eval);
    }
})

答案 1 :(得分:1)

您正在执行异步任务。 回调函数不一定在console.log之前运行。

这是javascript非阻塞IO的本质。当你需要进行IO操作时,可以传递回调,当IO完成时,它将调用你的回调,同时CPU可以自由地在你的JS文件中执行其他过程。

答案 2 :(得分:0)

因为console.log是在上述请求之前执行的,所以响应已经到来,因为这是异步执行。尝试将console.log放在匿名函数中以获得所需的值。

request('http://google.com', function (error, response, body) {
    if (!error && response.statusCode == 200) {
        var keys = body.split(",");
        eval = keys[0]; // Think keys[0] is 7777
        console.log(eval);
    }
})