programing

수집되지 않은 유형 오류: (중간값)(...)이 함수가 아닙니다.

goodsources 2022. 10. 10. 18:33
반응형

수집되지 않은 유형 오류: (중간값)(...)이 함수가 아닙니다.

클로저의 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

제가 무엇을 잘못했나요?

이 오류는 세 번째 줄에 세미콜론이 없기 때문에 발생합니다.

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);

세미콜론 규칙을 단순하게 만들려면

로 행(,[, ' 또는 임의의 산술 연산자를 자신의 행으로 해석하려면 세미콜론으로 시작해야 합니다.그렇지 않으면 실수로 이전 행과 결합될 수 있습니다.다른 모든 줄 바꿈에는 암묵적인 세미콜론이 있습니다.

바로 그겁니다.다 했어요.

  • 이 작업을 수행할 수 있는 유효한 연산자는 /, +, -뿐입니다.행의 선두에서 의미를 찾을 수 없는 바이너리 연산자이기 때문에 행의 선두를 '*'로 시작하는 것은 결코 바람직하지 않습니다.

  • 이렇게 할 때는 의 맨 앞에 세미콜론을 붙여야 합니다.앞줄에 세미콜론을 추가하여 문제를 해결하려고 하지 마십시오.그렇지 않으면 코드를 다시 정렬하거나 이동하면 문제가 다시 발생할 수 있습니다.다른 많은 답변(상위 답변 포함)이 이 제안을 하지만 좋은 방법은 아닙니다.


이러한 문자에 첫 번째 세미콜론이 필요한 이유는 무엇입니까?

다음 사항을 고려하십시오.

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

기타 주의사항

어떤 일이 일어나는지 설명하자면, 괄호는 색인화 되고 괄호는 함수 파라미터로 취급됩니다.backtick은 태그 부착 템플릿으로 변환되고 regex는 나눗셈으로 변환되며 +/- 부호 있는 정수는 명시적으로 플러스/마이너스 연산자로 변환됩니다.

물론 각 줄 바꿈 끝에 세미콜론을 추가하는 것만으로 이를 피할 수 있지만, 이렇게 하면 C 프로그래머처럼 코드화할 수 있다고는 생각하지 않습니다. 줄에 세미콜론을 붙이지 않으면 Javascript가 암묵적으로 당신을 대신해서 세미콜론을 붙일 수 있습니다.그래서, 다음과 같은 문구를 기억해 두세요.

return       // Implicit semicolon, will return undefined.
    (1+2);

i        // Implicit semicolon on this line
   ++;   // But, if you really intended "i++;"
         // and you actually wrote it like this,
         // you need help.

상기 건은 반품/계속/브레이크/+/--가 발생합니다.모든 linter는 dead-code의 경우 전자의 경우 또는 ++/-- 구문 에러의 경우 후자의 경우 전자의 경우를 검출합니다.

마지막으로 파일 연결을 사용하려면 각 파일의 끝이 세미콜론으로 끝나는지 확인하십시오.번들러 프로그램(권장)을 사용하고 있는 경우는, 자동적으로 이 처리를 실시합니다.

에러 케이스:

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;

나에게 그것은 훨씬 더 간단했지만 그것을 알아내는 데 시간이 걸렸다.기본적으로 .jslib에는

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

Unity(emscripten?)는 이 구문을 좋아하지 않는 것으로 나타났습니다.우리는 그것을 좋은 오래된 포루프로 교체했고 그것은 곧 불평을 멈췄다.불평하는 대사가 보이지 않는 게 정말 싫지만, 어쨌든 나를 두 배로 부끄럽게 해.

화살표 함수를 사용하여 메서드를 정의한 루트 클래스를 만드는 경우.원래 기능을 상속 및 덮어쓸 때도 같은 문제가 발생하였습니다.

class C {
  x = () => 1; 
 };
 
class CC extends C {
  x = (foo) =>  super.x() + foo;
};

let add = new CC;
console.log(add.x(4));

이것은 화살표 함수 없이 부모 클래스의 메서드를 정의함으로써 해결된다.

class C {
  x() { 
    return 1; 
  }; 
 };
 
class CC extends C {
  x = foo =>  super.x() + foo;
};

let add = new CC;
console.log(add.x(4));
  **Error Case:**

var handler = function(parameters) {
  console.log(parameters);
}

(function() {     //IIFE
 // some code
})();

출력: TypeError: (중간값)(중간값)이 *How to Fix IT -> 함수가 아닙니다.이는 식을 분리하기 위한 semi colan(;)이 없기 때문입니다.

 **Fixed**


var handler = function(parameters) {
  console.log(parameters);
}; // <--- Add this semicolon(if you miss that semi colan .. 
   //error will occurs )

(function() {     //IIFE
 // some code
})();

왜 이 오류가 발생하는가?이유: ES6 표준이 지정된 자동 세미콜론 삽입에 대한 특정 규칙

나는 이 상황에서 같은 문제에 직면했다.

let brand, capacity, color;
let car = {
  brand: 'benz',
  capacity: 80,
  color: 'yellow',
}

({ color, capacity, brand } = car);

단 한 마디로;car이치노

let car = {
  brand: 'benz',
  capacity: 80,
  color: 'yellow',
}; // <-------------- here a semicolon is needed

★★★★★★★★★★★★★★★★★★★전에는({ color, capacity, brand } = car);세미콜론을 보려면 필요합니다.

속성명이 메서드명과 동일한 ES2015 클래스를 새로 만들었을 때 이 문제에 직면했습니다.

예:

class Test{
  constructor () {
    this.test = 'test'
  }

  test (test) {
    this.test = test
  }
}

let t = new Test()
t.test('new Test')

이 실장은 NodeJS 6.10에 있습니다.

「set」(「set」)을 )를 사용할 수 예: 'Private' 속성, 'Private' 속성, 즉 'Private' 속성, 'Private' 메서드 이름)._test).

jsfiddle에서 개발자 도구를 엽니다.

내 경우: (각도, PrimeNG)

마이 에러:여기에 이미지 설명 입력 내 버전:

 "@angular/animations": "^12.2.0",
 "@angular/cdk": "^12.2.0",
 "@angular/common": "^12.2.0",
 "@angular/compiler": "^12.2.0",
 "@angular/core": "^12.2.0",
 "@angular/forms": "^12.2.0",
 "@angular/platform-browser": "^12.2.0",
 "@angular/platform-browser-dynamic": "^12.2.0",
 "@angular/router": "^12.2.0",
 "primeng": "^13.0.0-rc.2",
 "quill": "^1.3.7"

솔루션: node_modules/primeng/fesm2015/primeng-editor.mjs

이미지처럼 Quill Import를 업데이트합니다.

리액트에서도 같은 에러가 발생했기 때문에 문제를 파악하는 데 오랜 시간이 걸렸습니다.

여기에 이미지 설명 입력

원인은 내 앱에 콘텍스트를 감싸지 않았기 때문이다.

여기에 이미지 설명 입력

index.jsx(또는 Vite의 경우 main.jsx)로 이동합니다.JS)를 사용하여 Context가 앱에 둘러싸여 있는지 확인합니다.

Ionic Angular 업데이트에서 최신 버전으로 이동하는 경우

ng update @ionic/angular

언급URL : https://stackoverflow.com/questions/42036349/uncaught-typeerror-intermediate-value-is-not-a-function

반응형