为什么在节点js的一个callback函数中为全局variables赋值以在控制台中返回undefined?

以这个例子

var s; cb = function(error,result){ s = result; } memcached.get('hellow',cb); console.log(s); 

这给我undefined 。 我的代码有什么问题?

console.log(s); 行在cb函数执行之前执行,因为cb不会由memcached.get调用,直到result可用。 这是node.js中任何I / O操作发生的经典asynchronous性。

定义s之后需要执行console.log ,因为它是asynchronous的:

 var s; cb = function(error,result){ s = result; console.log(s); } memcached.get('hellow',cb); 

variabless在callback函数中被初始化。 这个callback函数只有在memcached.get()完成获取“hellow”的数据时才会被触发。

Javascript依赖于事件循环机制。 这意味着,JavaScript运行时将继续执行脚本,直到到达最后而不阻塞任何callback发生。

因此,在你的例子中,javascript运行时会在行memcached.get('hellow',cb)之后立即执行console.log(s)行。 因此,只有在cb在最后一行之前执行的情况下,console.log(s)才会打印一个有效值(其他未定义 )。

请在callback函数中移动console.log(s)以获得更一致的结果。