코드는 다음과 같습니다.
<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 : object is not a function”
익명 함수 호출 / 호출을 다른 괄호로 묶으면 경고가 실행되지만 여전히 오류가 발생합니다. “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 파일에서 함수 호출 전에 함수 본문이 있어야합니다.
답변
나는 이와 같은 오류가 발생하고 하루 반 동안 해결책을 찾으려고 노력했습니다. 나오미의 대답은 내가 필요한 해결책을 찾았습니다.
내 입력 (type = button)에는 name
onClick 이벤트에 의해 호출 된 함수 이름과 동일한 속성 이 있습니다. 속성을 변경하면 name
모든 것이 작동했습니다.
<input type="button" name="clearEmployer" onClick="clearEmployer();">
바뀌었다:
<input type="button" name="clearEmployerBtn" onClick="clearEmployer();">
답변
WebPack으로 TS를 컴파일하고 번들링 할 때이 오류가 발생합니다. 쉼표가 누락되어 잘못된 것으로 보이는 컴파일 export class AppRouterElement extends connect(store, LitElement){....}
됩니다 let Sr = class extends (Object(wr.connect) (fn, vr)) {....}
. 롤업과 함께 번들링 할 때 오류가 없습니다.