>  기사  >  웹 프론트엔드  >  자바스크립트 함수선언과 함수표현_javascript 스킬의 차이점 소개

자바스크립트 함수선언과 함수표현_javascript 스킬의 차이점 소개

WBOY
WBOY원래의
2016-05-16 17:20:401116검색

여전히 동일합니다.

코드 복사 코드는 다음과 같습니다.

<script> <BR>var f = function g() { <BR>return 1; <BR>} <BR>if (false) { <BR>f = function g(){ <BR>return 2 ; <BR>}; <BR>alert(g()); // 2 <BR></script>

이 코드를 IE 6에 넣으면 Chrome과 완전히 다른 두 가지 효과.

여기 출력 2는 ie6에서의 효과입니다. Chrome에서는 g가 정의되지 않은 것으로 나타납니다.

이는 JScript 버그로 간주될 수 있습니다.

여기에 있는 것은 g를 정의하는 함수 표현식일 뿐이라는 것이 분명합니다. if 조건문에 포함되어 함수 표현식만 정의하고 함수는 선언하지 않습니다.

그렇다면 그런 직접 접근은 확실히 잘못된 것입니다.

그럼 문장은 무엇이고 함수표현식은 무엇인가요?

ECMAScript에서 함수를 생성하는 가장 일반적인 두 가지 방법은 함수 표현식과 함수 선언입니다. ECMA 사양에서는 한 가지 점만 명확하게 하기 때문에 둘 사이의 차이점은 약간 혼란스럽습니다. 함수 선언은 ( 식별자) ​​(사람들이 흔히 함수 이름이라고 부르는 것), 함수 표현식에서는 이 식별자를 생략할 수 있습니다:
함수 선언:
 함수 함수 이름(매개변수: 선택 사항) {함수 본문}
함수 표현식:
함수 함수명 (선택사항) (매개변수: 선택사항) {함수 본문}

그래서 함수명이 선언되지 않으면 표현식이어야 한다고 볼 수 있지만, 만약 함수 이름이 선언되었습니다. 함수 선언인지 함수 표현식인지 어떻게 확인하나요? ECMAScript는 문맥에 따라 구별됩니다. function foo(){}가 할당 표현식의 일부인 경우 이는 함수 표현식입니다. function foo(){}가 함수 본문 내에 포함되거나 프로그램 맨 위에 있는 경우입니다. 함수 선언.

덜 일반적인 함수 표현식도 있는데, 이는 괄호로 묶인 것(function foo(){})입니다. 괄호()가 그룹화 연산자이기 때문입니다. 내부에는 표현식만 포함될 수 있습니다.

JSON을 실행하기 위해 eval을 사용할 때 JSON 문자열은 일반적으로 eval('(' json ')')으로 묶여 있다고 생각할 수 있습니다. 이 괄호 쌍은 파서가 JSON 중괄호를 코드 블록 대신 표현식으로 구문 분석하도록 합니다.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.