Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用Node.js在外部作用域中定义回调函数?_Javascript_Node.js_Callback - Fatal编程技术网

Javascript 如何使用Node.js在外部作用域中定义回调函数?

Javascript 如何使用Node.js在外部作用域中定义回调函数?,javascript,node.js,callback,Javascript,Node.js,Callback,我有以下代码: for (i in namespaces) { namespaces[i].on('connection',handleConnection(namespaces[i])); function handleConnection(ns) { return function (socket){//connection socket.on('setUsername',setUsernameCal

我有以下代码:

for (i in namespaces) 
{
    namespaces[i].on('connection',handleConnection(namespaces[i]));  

    function handleConnection(ns)
    {

        return function (socket){//connection

                    socket.on('setUsername',setUsernameCallback);//event received

                    function setUsernameCallback(userN){//I want to move this 
                       socket.username = userN;
                       //some code
                         }

                };
    }

}
为了使我的代码更易于阅读,我想在外部作用域或另一个JS文件中定义
setUsernameCallback
函数,如下所示:

for (i in namespaces) 
{
    namespaces[i].on('connection',handleConnection(namespaces[i]));  

    function handleConnection(ns)
    {

        return function (socket){//connection

                    socket.on('setUsername',setUsernameCallback);//event received

                };
    }

}




 function setUsernameCallback(userN){
                           socket.username = userN;
                           //some code
                             }

实际上,这是行不通的。我尝试了不同的方法来传递参数,但仍然得到了未定义的套接字,您可以像下面一样定义它

var setUsernameCallback = function(socket){
    return function(userN){
        socket.username = userN;
        //some code
     }
}
并将
插座
传递到功能,以便访问

socket.on('setUsername',setUsernameCallback(socket));//event received

如果给匿名函数起一个名字,会有什么好处?我不知道有什么好处。