Я объявил переменную с const после функции, почему она по-прежнему доступна там? - PullRequest
0 голосов
/ 15 апреля 2020

Этот код работает, и для меня это странное поведение, потому что для переменных 'const' не следует поднимать переменные. Может кто-нибудь объяснить, как и почему это работает?

describe("should dummy tests", () => {

let fixture: ComponentFixture<DummyComponent>;
let component: DummyComponent;
let element: HTMLElement;

beforeEach(async () => {
    await TestBed.configureTestingModule({
        declarations: declarations
    }).compileComponents();


    fixture = TestBed.createComponent(DummyComponent);
    component = fixture.componentInstance;
    element = fixture.nativeElement as HTMLElement;

    fixture.detectChanges();
});

it("should dummy text", async () => {
    expect(element.querySelector("dummy-selector")).toBeTruthy();
});
});

const declarations = [DummyComponent];

Ответы [ 2 ]

3 голосов
/ 15 апреля 2020

Потому что фактический вызов функции происходит после указания переменной 'arguments'. Проверьте эти два примера:

function logNumber() {
  console.log(number)
}

logNumber()

const number = 22
// output: Cannot access 'number' before initialization

while:

function logNumber() {
  console.log(number)
}

const number = 22

logNumber()
// output: 22

Во втором примере доступ к глобальному контексту выполнения осуществляется посредством вызова функции logNumber. Кстати, переменные 'const' и 'let' также выводятся, но вместо инициализации с помощью 'undefined' они остаются неинициализированными.

Дополнительная информация: Javascript Контексты выполнения

1 голос
/ 15 апреля 2020

Константа просто должна быть объявлена ​​до того, как код, к которому она обращается, оценивается (т.е. когда вызывается связанная функция).

Порядок, в котором написан код, не материя.

function example () {
    console.log(`The value of foo is ${foo}`);
}

try {
    example();
} catch (e) {
    console.log("There was an error in the first attempt!");
}
const foo = 1;
try {
    example();
} catch (e) {
    console.log("There was an error in the second attempt!");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...