3

このコードを Chrome で実行すると、Uncaught TypeError: Cannot read property 'concat' of undefined が発生します

function _log()
{
    'use strict'

    [this].concat(Array.from(arguments)).forEach(
        function (obj) { console.log(obj) }
    )
}

_log('foo', 'bar');

なぜこれが起こっているのかわかりません。どの[this]ように未定義にすることができますか? this未定義だったとしても[this]、配列であるべきですよね?

おもしろいことにuse strict、関数から行を削除すると、エラーが消え、コードが期待どおりに動作し、関数のコンテキストと引数がそれぞれ新しい行に記録されます。

this私が気付いていない厳密なモードでキーワードを使用することについて何か特別なことはありますか?

ありがとう。

4

1 に答える 1

5

これは面白いバグです:

の後のセミコロンを忘れた'use strict'だけで、コードの解析方法が完全に変わります。

'use strict'[this].concat...

"[Object window]"' use strict' チェーンで指定されたプロパティを取得しています。もちろんundefinedですので、 というプロパティはありません"concat"

于 2016-06-01T13:29:38.657 に答える