javascript - 클릭 - 자바스크립트 속성값 변경




잡히지 않는 TypeError:(중간 값)(...)은 함수가 아닙니다. (4)

단일 js 파일로 클로저에 js 논리를 작성하면 모든 것이 잘 작동합니다.

(function(win){
   //main logic here
   win.expose1 = ....
   win.expose2 = ....
})(window)

하지만 동일한 js 파일에서 클로저 이전에 로깅 대체 함수를 삽입하려고하면,

 window.Glog = function(msg){
     console.log(msg)
 }
 // this was added before the main closure.

 (function(win){
   //the former closure that contains the main javascript logic;
 })(window)

그것은 TypeError가 있다고 불평합니다 :

Uncaught TypeError: (intermediate value)(...) is not a function

내가 뭘 잘못 했니?


세미콜론 규칙을 간단하게 만들기

( , [ ,`, 또는 어떤 연산자 (/, +, -)가 유효한 유일한 행인)로 시작하는 모든 행은 세미콜론으로 시작해야합니다.

func()
;[0].concat(myarr).forEach(func)
;(myarr).forEach(func)
;`hello`.forEach(func)
;/hello/.exec(str)
;+0
;-0

이렇게하면

func()[0].concat(myarr).forEach(func)(myarr).forEach(func)`hello`.forEach(func)/hello/.forEach(func)+0-0

괴물.

추가 참고 사항

무슨 일이 일어날 지 언급하려면 : 괄호는 색인을 생성하고, 괄호는 함수 매개 변수로 처리됩니다. 백틱은 태그가있는 템플릿 으로 변형 될 것이고 정규 표현식이나 명시 적으로 부호가있는 정수는 연산자로 바뀔 것이다. 물론 모든 행의 끝에 세미콜론을 추가 할 수 있습니다. 신속하게 프로토 타입을 작성하고 세미콜론을 삭제할 때도 마음을 먹는 것이 좋습니다.

또한 모든 행의 끝에 세미콜론을 추가하면 다음과 같이 도움이되지 않으므로 다음과 같은 내용을 명심하십시오.

return // Will automatically insert semicolon, and return undefined.
    (1+2);
i // Adds a semicolon
   ++ // But, if you really intended i++ here, your codebase needs help.

위의 경우는 / continue / break / ++ / -를 반환합니다. 모든 linter는 이것을 dead-code 나 ++ / - 문법 오류 (++ / -는 결코 현실적으로 일어나지 않을 것입니다)로 잡을 것입니다.

마지막으로, 파일 연결을 사용하려면 각 파일이 세미콜론으로 끝나야합니다. 번들러 프로그램을 사용하는 경우 (권장), 자동으로이를 수행해야합니다.


나를 위해 그것은 훨씬 더 간단했다. 그러나 그것을 이해하는 것은 나에게 시간이 걸렸다. 우리는 기본적으로 .jslib에있었습니다.

some_array.forEach(item => {
    do_stuff(item);
});

Unity (emscripten?)는 그 구문을 좋아하지 않습니다. 우리는 그것을 낡은 for-loop로 바꾸었고 즉시 불평을 멈추게했습니다. 나는 그것에 대해 불평하는 선을 보여주지 않는다는 것을 정말로 싫어하지만, 어쨌든 나를 두 번 수치 스럽다.


이 오류는 세 번째 줄에 세미콜론이 누락 된 결과입니다.

window.Glog = function(msg) {
  console.log(msg);
}; // <--- Add this semicolon

(function(win) {
  // ...
})(window);

ECMAScript 사양에는 자동 세미콜론 삽입에 대한 특정 규칙 이 있지만이 경우 세미콜론은 자동으로 삽입되지 않습니다. 다음 줄에서 시작하는 괄호 안의식이 함수 호출에 대한 인수 목록으로 해석 될 수 있기 때문입니다.

즉, 해당 세미콜론이 없으면 익명의 window.Glog 함수가 msg 매개 변수와 함께 함수와 함께 호출되고 그 다음에 (window) 가 호출되어 반환 된 모든 것을 호출하려고 시도했음을 의미합니다.

이것이 코드가 해석되는 방식입니다.

window.Glog = function(msg) {
  console.log(msg);
}(function(win) {
  // ...
})(window);

오류 사례 :

var userListQuery = {
    userId: {
        $in: result
    },
    "isCameraAdded": true
}

( cameraInfo.findtext != "" ) ? searchQuery : userListQuery;

산출:

TypeError: (intermediate value)(intermediate value) is not a function

수정 : 식을 분리하기 위해 세미콜론 (;)이 누락되었습니다.

userListQuery = {
    userId: {
        $in: result
    },
    "isCameraAdded": true
}; // Without a semi colon, the error is produced

( cameraInfo.findtext != "" ) ? searchQuery : userListQuery;




typeerror