-2

x = {}

function f1() { this.v1 = 'cool' try { console.log('v1:', v1) } catch (e) { console.log('error') } }

f1.bind(x)() f1() f1.bind(x)() f1()

Вывод:

error
v1: cool
v1: cool
v1: cool

Объясните почему этот код выдаёт error сначала, а потом только cool.

Как вообще получается что v1 может обходиться без this в некотором случае?

exebook
  • 1,308
  • 1
    насчет v1 без this - когда вы вызываете функцию без bind(x), this ссылается на window (или какой там у вас Global scope), и v1 становится глобальной переменной,и поэтому доступна без this – Darth May 31 '15 at 09:32
  • Странно почему пометили этот вопрос как дубликат, в то время как он задан на год раньше чем референтный. – exebook Mar 27 '17 at 20:00

1 Answers1

4

Потому что во втором вызове this - это window. Начиная с этого момента существует глобальная переменная v1.

Qwertiy
  • 123,725