エラーが発生します
TypeError: Cannot call method 'call' of null
クロムで。コンソールを開いて、キャッチされていない例外をキャッチするように設定し、ページをリロードすると、次の行で停止します (縮小 -> 整形コード):
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
は atL.call(...)
です。を見ると、 inScope 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 の長いチャンクの途中で発生します (実行中にアニメーションに 1 秒程度の一時停止が表示されます)。削減されたデータ セットで実行しても再現されません。
このようにコンソールがスクリプトと同期していない理由について、デバッグのヒントや情報を持っている人はいますか?
編集: 変数 の縮小されたソースを検索しましたL
が、 以外[].indexOf
に設定されている場所は 2 つしかなく、この行にヒットすると、それらは両方とも明らかに範囲外です。
同じ問題が で発生しますがChrome Canary 27.0.1440.0
、別の行で発生します。それ以外の状況は同じです。変数L
は定義されていますがL.call(...)
、TypeError
.