이 아마 덩어리 질문이지만,이 작품 왜 이해가 안 :자바 스크립트 구문 분석/평가 순서?
<script type="text/javascript">
alert(foo);
function foo() { }
</script>
이 경고 "함수 foo를 (} {)",하지만 난 경고를 기대는 함수 foo 전에 평가했다 한정된. 누군가가 구문 분석/평가 순서에 대해 이해하지 못하는 것을 설명 할 수 있습니까?
이 아마 덩어리 질문이지만,이 작품 왜 이해가 안 :자바 스크립트 구문 분석/평가 순서?
<script type="text/javascript">
alert(foo);
function foo() { }
</script>
이 경고 "함수 foo를 (} {)",하지만 난 경고를 기대는 함수 foo 전에 평가했다 한정된. 누군가가 구문 분석/평가 순서에 대해 이해하지 못하는 것을 설명 할 수 있습니까?
PHP와 마찬가지로 JavaScript는 코드가 실행되기 전에 최상위 수준 인 function
선언을 추적합니다. 그러나 사용하는 할당하여 자동 기능을 우회 할 수있다 :
var a = function a() { }
A는 자바 스크립트에서 함수 정의의 유형에 대해 읽어야합니다.
기능 선언은 상단에 게양, 따라서 무엇보다도 선언됩니다.
당신이 익명 함수에 변수 a
를 할당 그래서
var a = function() {
// do it
};
같은 변수에 할당하여이 동작을 변경할 수 있습니다.
참고로, 심각한 버그 [http://groups.google.com/group/comp.lang.javascript/msg/5b508b03b004bce8]로 인해 함수가 여전히 IE에서 'var'선언 이전에 호이스트됩니다. 함수식이 명명 되었기 때문에 모든 JScript 버전에 있어야합니다. – CMS
@CMS 흥미로운 작은 쪽지. IE의 모든 버전에 영향을 줍니까? – alex
@alex, 예 ** IE 9 플랫폼 미리보기를 포함한 IE의 모든 ** 버전! (나는 정말로 실망했다.) 그 버그는 그것보다 더 나쁘다. 'var foo = function bar() {}; 경고 (foo === bar); // false! ' – CMS