[英]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.