[this] 如何在严格模式下未定义?

How can [this] be undefined in strict mode?

当我在 Chrome 中 运行 这段代码时,我得到一个 Uncaught TypeError: Cannot read 属性 '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 是否有我不知道的特殊之处?

谢谢。

这是一个有趣的错误:

您只是忘记了 'use strict' 之后的分号,这完全改变了代码的解析方式:

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

您正在使用“use strict”链中名为 "[Object window]" 的 属性。当然是 undefined,所以它没有任何 属性 称为 "concat"