繁体   English   中英

Javascript / JQuery范围问题

[英]Javascript / JQuery Scope Issue

我已经准备好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

});

});

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

在第一个文件中,您不需要$(document).ready事件,因为您无需操纵DOM。 只需将其删除并在全局范围内创建变量,即可在文件1的其他部分以及此文件之后的所有文件中看到它们。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM