如何调试这样的javascript错误?

时间:2016-10-10 07:38:14

标签: javascript

我是javascript的新手,并试图找出以下代码无效的原因:

let ws = new WebSocket("ws://echo.websocket.org/");
ws.onmessage = msg => console.log(msg);
let queue = [];
ws.onopen = () => {
    queue.forEach(msg => ws.send(msg));
};

const send = () => {
    if(ws.readyState === ws.OPEN){
        ws.send(msg);
    }
    else{
      queue.push(msg);
    }
};

send("foo");
send("bar");

然后我意识到我需要:let send = (msg) => {

在发现问题之前,我曾使用过lint和dev工具,但我没有看到任何警告。我应该怎么做才能找到各种问题?

http://www.es6fiddle.net/iu3qwem6/

2 个答案:

答案 0 :(得分:0)

eslint。这个甚至还有一个特定的规则:http://eslint.org/docs/rules/no-undef

你应该得到一个ReferenceError,因为你的let / const意味着严格的语法,不过如果你错过了我猜你的引擎因为某种原因没有在严格模式下使用。无论如何,使用静态分析找到它是一个更好的错误,因为即使从未调用函数它也会发现错误。

答案 1 :(得分:0)

我建议您尝试使用TypeScript。在TypeScript playground处查看您的示例。

它会立即告诉您:Cannot find name msg功能中的send