Если не окно, кто хранит ссылку на переменную?

Следующий код я запускаю тремя разными способами, но только один из них работает без ошибок. Я не понимаю, почему. Не могли бы вы сказать мне, если не окно, кто сохраняет ссылку на переменную?

СЦЕНАРИЙ:

'use strict';

let s = function(){};

ПОПРОБУЙТЕ 1***************************************

s();

КОНСОЛЬ: ОК

ПОПРОБУЙТЕ 2******************************************

window.s();

КОНСОЛЬ: ОШИБКА

TypeError: window.s не является функцией

ПОПРОБУЙТЕ 3******************************************

this.s();

КОНСОЛЬ: ОШИБКА

TypeError: this.s не является функцией



person Slawomir Jakubek    schedule 08.07.2020    source источник
comment
Так работает let. Это в рамках файла, зачем ему быть свойством какого-то объекта?   -  person Thomas    schedule 08.07.2020
comment
Связано: Разрешить операторам создавать свойства глобального объекта?.   -  person Sebastian Simon    schedule 08.07.2020


Ответы (2)


let может быть доступен только внутри области, в которой он объявлен (область действия блока), используйте var , который определяет переменную глобально ....

Пытаться

'use strict';
var s = function(){};

'use strict';

var  s = function(){};
// TRY 1**********************************

s();

// TRY 2**********************************

window.s();


// TRY 3**********************************

this.s();

person BLAYTI Ribh    schedule 08.07.2020

let не создает свойство window.

Как и const, let не создает свойства объекта окна при глобальном объявлении (в самой верхней области) MDN.

person Barışcan Koçak    schedule 08.07.2020