>  기사  >  웹 프론트엔드  >  자바스크립트로 함수 선언 및 함수 표현하기(기묘하고 교활한 기술)_javascript 스킬

자바스크립트로 함수 선언 및 함수 표현하기(기묘하고 교활한 기술)_javascript 스킬

WBOY
WBOY원래의
2016-05-16 18:09:531095검색

예를 들어보세요:


[Ctrl A 모두 선택 참고: 외부 J를 도입해야 하는 경우 실행하려면 새로 고쳐야 합니다.
]

코드의 의미는 함수를 선언한 후 즉시 실행하는 것입니다. Javascript의 변수 범위는 함수를 기반으로 하기 때문에 변수 오염을 피할 수 있지만 여기서 비트 연산자 "~"는 혼동을 줍니다. 언뜻 보기에 이를 제거하고 다시 실행하면 다음과 같은 오류가 보고됩니다.

이유를 설명하기 전에 먼저 Javascript의 두 가지 개념인 함수 선언과 함수 표현식을 명확히 하겠습니다.

먼저 함수 선언이 무엇인지 살펴보겠습니다.

[Ctrl A 모두 선택 참고:
외부 J를 도입해야 하는 경우 실행하려면 새로 고쳐야 합니다.
]
함수 표현식이 어떻게 보이는지 확인하세요.
[Ctrl A 모두 선택 참고:
외부 J를 도입해야 하는 경우 실행하려면 새로 고쳐야 합니다.
]

지금 기사 시작 부분을 다시 살펴보세요. 비트 연산자 "~"를 제거한 후 오류가 보고되는 이유는 구문 분석의 관점에서 Javascript가 함수 선언 바로 뒤에 괄호 사용을 허용하지 않기 때문입니다. 반면 함수 표현식에는 이러한 제한이 없습니다. 함수 선언 앞에 "~" 연산자를 추가하면 구문 분석기가 다음을 함수 표현식으로 처리할 수 있습니다. 마찬가지로 "!, , -" 및 기타 연산자를 함수 선언 앞에 추가하면 됩니다. 함수 선언도 가능합니다.
그렇다면 다음 함수 표현식을 사용해 보는 것은 어떨까요?

[Ctrl A 모두 선택 참고:
외부 J를 도입해야 하는 경우 실행하려면 새로 고쳐야 합니다.
]

하지만 구문 분석 관점에서 보면 문제가 없을 것 같지만, 위 코드에는 단점이 있는데, 이는 기존 운영 환경을 오염시키고 잠재적인 문제를 일으킬 수 있습니다.


<script> ~function() { alert("hello, world."); }(); </script>[Ctrl A 모두 선택 참고: <script> function() { alert("hello, world."); }; function foo() { alert("hello, world."); }; </script>외부 J를 도입해야 하는 경우 실행하려면 새로 고쳐야 합니다. <script> var foo = function() { alert("hello, world."); }; </script>]<script> var foo = function() { alert("hello, world."); }(); </script> <script> (function() { alert("hello, world."); })(); </script> 나는 원칙을 이해합니다. 어떤 글쓰기 방법을 만나더라도 장거 승려는 더 이상 혼란스럽지 않을 것입니다.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.