Как [this] можно не определять в строгом режиме?

Когда я запускаю этот код в 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 в строгом режиме, о котором я не знаю?

Спасибо.


person Lynn    schedule 01.06.2016    source источник


Ответы (1)


Это забавный баг:

Вы просто забыли точку с запятой после 'use strict', что полностью меняет способ анализа кода:

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

Вы берете свойство с именем "[Object window]" в цепочке "use strict". Конечно, это undefined, поэтому у него нет свойства с именем "concat".

person Denys Séguret    schedule 01.06.2016
comment
Разве у тебя не было другого имени ?! о_О - person Liam; 01.06.2016
comment
@Liam Ты думаешь о Дистрое? Это было некоторое время назад - person Denys Séguret; 01.06.2016
comment
@Lynn Ты заставил меня почесать голову несколько минут. И я думаю, я был не единственным. - person Denys Séguret; 01.06.2016
comment
Ах да, вот и все. #famousinyourownlifetime :) - person Liam; 01.06.2016