Javascript/JQuery范围问题

Javascript/JQuery范围问题,javascript,jquery,node.js,socket.io,Javascript,Jquery,Node.js,Socket.io,我已经在jQuery的文档中准备了一些Node.js和一些函数。我有两个文件,两个文件都准备好了。但是,一个文件调用另一个文件,它无法识别该函数。ReferenceError:未定义SocketGameOut =========== File 1 ============= $(document).ready( function () { var socket = io.connect('http://local.baseball.com:3333'); socket.on('news',

我已经在jQuery的文档中准备了一些Node.js和一些函数。我有两个文件,两个文件都准备好了。但是,一个文件调用另一个文件,它无法识别该函数。ReferenceError:未定义SocketGameOut

=========== File 1 =============

$(document).ready( function () {

var socket = io.connect('http://local.baseball.com:3333');

socket.on('news', function (data) {
    SocketBroadcastIn(data);
});

socket.on('message', function (data) {
    SocketGameIn(data);
});

function SocketGameOut(outstring) {
    socket.emit('clientData', outstring );
}

});

============ File 2 ==============

$(document).ready( function () {

    $("#login").click( function () {

    var loginData = { command: 'login', user: $("#user").val(), pass: $("#password").val() }
    var data = JSON.stringify(loginData);

    SocketGameOut(data);  <--This function call returns 
              ReferenceError: SocketGameOut is not defined

});

});
=============文件1=============
$(文档).ready(函数(){
var socket=io.connect('http://local.baseball.com:3333');
socket.on('news',函数(数据){
SocketBroadcasting(数据);
});
socket.on('message',函数(数据){
SocketGameIn(数据);
});
函数SocketGameOut(外接){
emit('clientData',outstring);
}
});
=============文件2==============
$(文档).ready(函数(){
$(“#登录”)。单击(函数(){
var loginda={command:'login',user:$(“#user”).val(),pass:$(“#password”).val()}
var data=JSON.stringify(loginda);

SocketGameOut(data);函数遵循与变量相同的作用域规则(事实上,函数就是变量)。因此,如果在另一个函数中创建函数,它将仅在该函数中可见

在第一个文件中,您不需要
$(document).ready
事件,因为您不操纵DOM。只需删除它并在全局范围中创建变量,这样它们就可以在文件1的其他部分和所有文件(包括在此文件之后)中可见

另一种方法是将此函数附加到
$(document).ready
之外的变量,因此它将在全局范围内,但此处不需要,第一种方法会更好:

var SocketGameOut;
$(document).ready( function () {
    //your code...
    SocketGameOut = function (outstring) {
         socket.emit('clientData', outstring );
    }
    //your code...
});

简单的解决方法是将SocketGameOut设置为全局。例如,在文件1中,您的
文档中的最后一个内容。ready
,put
window.SocketGameOut=SocketGameOut