跳到正文
多吃点的小饭桌

关于函数作为参数传递的笔记

/ 2 min read

更新于:
目录

在最近的项目中用到了websocket,遇到了一些问题,记下来。

案情重现

首先实例化一个连接(随便找的回声测试)

var ws = new WebSocket("ws://121.40.165.18:8800");

然后想当然的加上事件监听↓

ws.addEventListener('message', fun(event))
function fun(e) {
console.log(e.data)
}
```javascript
然后发现不起作用,而改用匿名函数就没啥问题。
```javascript
ws.addEventListener('message', function (event) {
console.log(event.data)
})

笔记

其实仔细想想就没发现了,第一次ws.addEventListener('message', fun(event))中传入的fun(event)不是一个函数,而是fun(event)的返回值undefind

正确的方法是

ws.addEventListener("message", fun);

举个例子

function main(f) {
f("123");
}
function fun(str) {
console.log(str);
return "qwe";
}
main(fun); //'123'
main(fun()); // Uncaught TypeError: f is not a function

其中fun是作为一个变量传入的main函数,而如果传入fun(),则传入的实际是fun()的返回值'qwe'

正确的操作如下

var ws = new WebSocket("ws://121.40.165.18:8800");
ws.addEventListener("message", fun);
function fun(e) {
console.log(e.data);
}

我可真是个小机灵鬼呢~