【发布时间】:2019-01-14 05:32:28
【问题描述】:
我是 javascript 新手,但有一些 c++ 背景,所以以下内容让我感到困惑:我从浏览器创建了一些 WebSocket 连接,如下所示:
function ready() {
var connection = new WebSocket('ws://localhost:3000');
connection.onmessage = function(msg) {
console.log(msg.data);
};
}
document.addEventListener("DOMContentLoaded", ready);
connection 变量是本地变量,因此当ready() 退出时,对WebSocket 对象的引用超出范围。我的期望是连接应该随着它的回调而死,但不知何故我仍然能够得到connection.onmessage 回调。我的理解是它与javascript 范围无关,而是WebSocket 连接在内部组织的问题。是这样吗?你能解释一下这种行为吗?我相信 javascript 中的每个异步 api 也是如此,另一个例子:
function get(url) {
var req = new XMLHttpRequest();
req.open("GET", url);
req.onload = function() {
console.log(req.response);
}
req.send();
}
get("file.json");
因此,回调似乎与它们所放置的对象无关。提前致谢!
【问题讨论】:
标签: javascript asynchronous websocket xmlhttprequest