“即使定义了变量,也无法调用方法'调用'null”(Chrome)

时间:2013-03-14 18:16:45

标签: javascript google-chrome

我收到了错误

TypeError: Cannot call method 'call' of null
在Chrome中

。打开控制台,设置捕获未捕获的异常并重新加载页面后,它将在以下行停止(minified->美化代码):

return this instanceof Q && (b = null != (d = this.getO()) ? d.id : void 0, 0 <= L.call(null != (f = null != c ? "function" === typeof c.get ? c.get("foo") : void 0 : void 0) ? f : [], b))

该行中call的唯一实例位于L.call(...)。查看Scope Variables,我在L中看不到Local的实例。在Closure中,我看到了:

L: function indexOf() { [native code] }
  arguments: null
  caller: null
  length: 1
  name: "indexOf"
  __proto__: function Empty() {}

正如预期的那样,它被定义并且是一个功能。检查__proto__会显示call方法。

此外,控制台反映了Scope Variables

中显示的状态
> L
function indexOf() { [native code] }
> L.call
function call() { [native code] }
> L.call([], b) // This is what it is getting called with
-1

复制违规行(减去return)会按预期运行。

> this instanceof Q && (b = null != (d = this.getO()) ? d.id : void 0, 0 <= L.call(null != (f = null != c ? "function" === typeof c.get ? c.get("foo") : void 0 : void 0) ? f : [], b))
false

我只能在生产环境中重现此行为。它偶尔会偶然发生,没有我能找到的模式。我们既没有观察也没有在Chrome以外的任何浏览器中报告过它。我正在运行Chrome 25.0.1364.172,并在Chrome 25.0.1364.152中记录了此错误。

这种情况发生在很长一段时间的javascript中(运行时动画中有一秒左右的可见暂停)。在减少的数据集上运行它不会重现它。

有没有人有任何调试技巧和/或有关控制台以这种方式与脚本不同步的原因的信息?

编辑:我在缩小的源代码中搜索了变量L,但只有两个地方被设置为[].indexOf以外的任何其他位置,当我点击它时它们都明显超出了范围线。

同样的问题出现在Chrome Canary 27.0.1440.0中,但在另一条线上。情况另外相同:已定义变量L,但L.call(...)会抛出TypeError

0 个答案:

没有答案