add(3)(4) =add(3,4) 함수 체인 호출
Code1
function add(...v) {
return v.reduce((x,y)=>x+y);
}
Code2
function add(...v) {
var sum = v.reduce((x,y)=>x+y);
var tmp = function (...v) {
sum = sum + v.reduce((x,y)=>x+y);
return tmp;
};
tmp.valueOf = function (){
return sum;
};
tmp.toString = function () {
return "" + sum;
};
return tmp;
}
설명 코드 2
테스트 코드2
add(1); // function 1
add(1, 2); // function 3
add(1, 2)(2); // function 5
add(1, 2)(2, 5); // function 10
Code3(Code2 Plus)
function add(...v) {
let isNumber = value => typeof value === "number";
// 、
let hasMore = v => v && v.length > 1;
let subMore = v => v.reduce((x, y) => {
x = isNumber(x) ? x : (Array.isArray(x) ? sub(x) : 0);
y = isNumber(y) ? y : (Array.isArray(y) ? sub(y) : 0);
return x + y;
});
let subOne = v => isNumber(v) ? v : (v && Array.isArray(v[0]) ? sub(v[0]) : 0);
let sub = v => hasMore(v) ? subMore(v) : subOne(v[0]);
let sum = sub(v);
let tmp = function (...v) {
sum = sum + sub(v);
return tmp;
};
tmp.valueOf = function (){
return sum;
};
tmp.toString = function () {
return "" + sum;
};
return tmp;
}
설명 코드 3
개선 후 수조와 문자열을 동시에 입력할 수 있으며, 수조의 깊이를 제한하지 않지만, 반드시 순수한 숫자이어야 하며, 문자열 숫자일 수 없고, 클래스 대상일 수도 없다
테스트 코드 3
add(1); // / {[Number: 1] valueOf: [Function], toString: [Function] }
add(1, 2); // / {[Number: 3] valueOf: [Function], toString: [Function] }
add(1, 2)(2); // / {[Number: 5] valueOf: [Function], toString: [Function] }
add(1, 2)(2, 5); // {[Number: 10] valueOf: [Function], toString: [Function] }
add(null, 2)(2,undefined); // { [Number: 4] valueOf: [Function], toString: [Function] }
add(null, 2)(2,undefined, null); // { [Number: 4] valueOf: [Function], toString: [Function] }
add(1, 2, [1,2,3,4, [1,3,4,5,1,5]]); // { [Number: 32] valueOf: [Function], toString: [Function] }
add(1, 2, [1,2,3,4, [1,3,4,5,1,5]])(1,3,4,[1,4]); // {[Number: 45] valueOf: [Function], toString: [Function] }
add({0: 1, 1: 2, length: 2}) ; // {[Number: 0] valueOf: [Function], toString: [Function] }
숫자를 얻으려면 숫자로 바꾸는 방법을 사용해야 한다
예: +add(1);add(1) - 0; 등등
불완전한 곳
add(1,1) == 2 // true
add(1,1) === 2 // false
typeof add(1,2)는 function이기 때문에 인쇄와 계산은 각각 toString이나valueOf 함수를 호출하고 ==를 사용할 때 유형을 판단해야 하기 때문에false
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.