이것은 위의 js 고도의 예입니다.함수 선언에 코드가 있는지 확인하세요
이 코드에는 잘못된 구문이 있다고 합니다. 대부분의 브라우저는 두 번째 문을 반환하고 Firefox는 첫 번째 문을 반환합니다. 이유는 무엇입니까? 함수 표현 형태로 바꿀 수 있다면 왜 그럴까요?
첫 번째는 함수 선언인데 일반적으로 if-else에서는 함수를 선언하지 않기 때문이죠
두 번째는 변수에 익명 함수를 할당하는 것입니다. 프로모션 같은 건 없습니다.
함수 xxx(){}를 직접 작성하면 동일한 이름의 함수가 두 개 있으면 상단에서 var xxx를 두 번 실행하는 것과 같으므로 유효하지 않습니다
그 당시 JavaScript 사양은 여전히 ES5였고, 브라우저는 아직 블록 수준 범위(ES2016+)를 구현하지 않았으며 범위 수준은 함수 수준에만 있었습니다. 그래서 썼구나
작성자:
본질적인 차이는 없습니다
js는 미리 선언되어 있습니다! ! ! 함수는 선언될 때 범위 상단에 직접 언급됩니다. if에는 범위가 없으므로 두 함수는 하나의 범위이며 두 번째 함수가 첫 번째 함수를 대체합니다. ! 두 번째 코드의 경우 먼저 변수 sayhi를 선언한 다음 if 판단 후에 sayhi에 값을 할당합니다.
첫 번째는 함수 선언인데 일반적으로 if-else에서는 함수를 선언하지 않기 때문이죠
두 번째는 변수에 익명 함수를 할당하는 것입니다. 프로모션 같은 건 없습니다.
함수 xxx(){}를 직접 작성하면 동일한 이름의 함수가 두 개 있으면 상단에서 var xxx를 두 번 실행하는 것과 같으므로 유효하지 않습니다
그 당시 JavaScript 사양은 여전히 ES5였고, 브라우저는 아직 블록 수준 범위(ES2016+)를 구현하지 않았으며 범위 수준은 함수 수준에만 있었습니다. 그래서 썼구나
으아악작성자:
으아악본질적인 차이는 없습니다
js는 미리 선언되어 있습니다! ! ! 함수는 선언될 때 범위 상단에 직접 언급됩니다. if에는 범위가 없으므로 두 함수는 하나의 범위이며 두 번째 함수가 첫 번째 함수를 대체합니다. ! 두 번째 코드의 경우 먼저 변수 sayhi를 선언한 다음 if 판단 후에 sayhi에 값을 할당합니다.