수집되지 않은 유형 오류: (중간값)(...)이 함수가 아닙니다.
클로저의 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
'programing' 카테고리의 다른 글
MySQL에 날짜 추가 (0) | 2022.10.10 |
---|---|
maria가 있는 도커 컨테이너에 SQL 덤프 파일 설치DB (0) | 2022.10.10 |
PHP "php://input" vs $_POST (0) | 2022.10.10 |
mysql에 데이터가 없는 데이터베이스 구조 복사(빈 테이블 포함) (0) | 2022.10.10 |
JavaScript를 사용하여 CSS 값 가져오기 (0) | 2022.10.10 |