Javascript "Uncaught TypeError : object is not a function"연관성 질문
코드는 다음과 같습니다.
<body>
<a href="javascript:;" id="test">hello</a>
</body>
<script type="text/javascript">
document.getElementById("test").addEventListener("click", function () {
test()
}, false)
function test() {
var postTypes = new Array('hello', 'there')
(function() { alert('hello there') })()
}
</script>
이것은 다음을 던질 것입니다.
"Uncaught TypeError : 개체가 함수가 아닙니다."
익명 함수 호출 / 호출을 다른 괄호로 묶으면 경고가 실행되지만 여전히 오류가 발생합니다. "var postTypes"정의 뒤에 세미콜론을 넣으면 완전히 괜찮습니다.
나는 자바 스크립트가 세미콜론을 필요로하지 않는다고 믿게되었고, 그래서 내가 완전히 이해하지 못하는 함수 애플리케이션의 이상한 연관성 규칙이 있다고 추측하고 있습니다. 이 오류가 발생하는 이유는 무엇입니까?
자바 스크립트는 세미콜론을 필요로하지 않습니다. 단지 코드가 그것없이 구문 오류가되었을 때 인터프리터가 줄 바꿈시이를 삽입합니다 *.
불행히도 코드
var a = new B(args)(stuff)()
입니다 하지 구문 오류, 그래서 ;
삽입되지 않습니다. (실행할 수있는 예는
var answer = new Function("x", "return x")(function(){return 42;})();
이와 같은 놀라움을 피하려면 항상 문을 ;
.
(* : 그냥 엄지 손가락 규칙. 항상 사실은 아닙니다. 삽입 규칙은 훨씬 더 복잡합니다. 세미콜론 삽입에 대한 이 블로그 페이지 에 더 자세한 내용이 있습니다.)
코드에서 ASI ( 자동 세미콜론 삽입 ) 프로세스가 발생하지 않는 경우가 발생합니다.
ASI에 의존해서는 안됩니다. 세미콜론을 사용하여 문을 적절하게 구분해야합니다.
var postTypes = new Array('hello', 'there'); // <--- Place a semicolon here!!
(function() { alert('hello there') })();
코드가 실제로 배열 개체를 호출하려고했습니다.
비슷한 오류가 발생하여 제 경우에는 배열 변수 이름을 payInvoices로 지정하고 함수도 payInvoices로 지정했습니다. AngularJs를 혼동했습니다. 이름을 processPayments ()로 변경하면 마침내 작동했습니다. 이것을 알아내는 데 오랜 시간이 걸렸기 때문에이 오류와 솔루션을 공유하고 싶었습니다.
JavaScript 파일에서 함수 호출 전에 함수 본문이 있어야합니다.
'Development Tip' 카테고리의 다른 글
Django의 ./manage.py syncdb를 실행할 때 자동으로 관리자 사용자 생성 (0) | 2020.10.06 |
---|---|
Event.target이 Typescript의 요소가 아닌 이유는 무엇입니까? (0) | 2020.10.05 |
범위 기반 for 루프를 사용할 때 반복기가 필요합니다. (0) | 2020.10.05 |
팬더의 for 루프가 정말 나쁜가요? (0) | 2020.10.05 |
Python 코드의 들여 쓰기를 중괄호로 변환하는 방법이 있습니까? (0) | 2020.10.05 |