求助一个 关于 arguments 的问题

非常小概率 安卓手机出现一个bug,大概率是我自己写的,但是不是很理解产生的原因。报错的地方在这里:

报错的堆栈是:[“src/cocos2d-jsb.js”,0,“Uncaught TypeError: Cannot read property ‘length’ of null”,"[0]emitEvents@src/cocos2d-jsb.js:12830\n[1]editBoxEditingDidEnded@src/cocos2d-jsb.js:17513\n[2]endEditing@jsb-adapter/jsb-engine.js:1486\n[3]onComplete@jsb-adapter/jsb-engine.js:1452\n[4]func@jsb-adapter/jsb-builtin.js:4699\n[5]dispatchEvent@jsb-adapter/jsb-builtin.js:2860\n[6]jsb.onTextInput@jsb-adapter/jsb-builtin.js:4782",“时间:Tue Jun 02 2020 10:33:25 GMT+0800 (PST)”]

这个看起来是事件响应, 我出bug的地方是一个输入框,我确实在开始输入和结束输入都挂了回调。 但是不理解的是,为什么偶现图中的 args 为null。 导致报错, 概率很低很低 ,一些安卓手机会发生,我基本上没重现过, 而且退出app重进也能恢复。

用web 调试, 可以看到这里一般是 回调的方法和 使用回调的组件, 那就是 回调的方法没了,或者组件没了。 才会导致bug

我记得 use strict 之后,函数定义了参数后就不能用 arguments。如果要用 arguments 就不能定义参数(events),需要自己 var events = arguments[0];

明白了,我看报错的地方看错了。报错的应该是


这句代码里 events 为null 了, 所以才会报Cannot read property ‘length’ of null , 我对js研究不是很深,但是我看的这个类,是引擎底层的代码,我没改过,只是看到报错的堆栈,找到了这里。 那么按照你的说法这个地方是有隐式问题的, 我不确定为什么多数情况下不会报错。 但是极少数情况下, events出现为nul的情况,导致报错。

我对这个editbox的使用也是很简单的,在编译器挂了一个回调, 报错也没有走到我的回调里的代码,而是在底层对回调处理的时候报错了。

所以我准备按照你的方法var events = arguments[0] 改一下试试, 看看效果, 这个bug本身就非常少见。 从表面逻辑上来看也看不出有什么问题。但是时不时来一下确实挺奇怪的

你好,楼主有解决这个问题吗,我这边也遇到这个了,情况就是玩家在输入框不管输入啥,都显示不出来
Uncaught TypeError: Cannot read property ‘length’ of null
[0]emitEvents@src/cocos2d-jsb.js:14548
[1]editBoxTextChanged@src/cocos2d-jsb.js:19297
[2]onInput@jsb-adapter/jsb-engine.js:2091
[3]func@jsb-adapter/jsb-builtin.js:4699
[4]dispatchEvent@jsb-adapter/jsb-builtin.js:2860
[5]jsb.onTextInput@jsb-adapter/jsb-builtin.js:4782