关于函数作为参数传递的笔记
在最近的项目中用到了websocket
,遇到了一些问题,记下来。
案情重现
首先实例化一个连接(随便找的回声测试)
var ws = new WebSocket('ws://121.40.165.18:8800')
然后想当然的加上事件监听↓
ws.addEventListener('message', fun(event))
function fun(e) {
console.log(e.data)
}
然后发现不起作用,而改用匿名函数就没啥问题。
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)
}
我可真是个小机灵鬼呢~