은 다음과 같이 자바 스크립트로 코딩 할 수 있습니다 :자바 스크립트는 변수가 값이고 함수가 될 수 있습니까?
var foo = function(n) { //magic codes };
var bar = foo(2);
bar + 2 // result: 4
bar(2) // result: 4
bar(2)(2) // result: 6
은 다음과 같이 자바 스크립트로 코딩 할 수 있습니다 :자바 스크립트는 변수가 값이고 함수가 될 수 있습니까?
var foo = function(n) { //magic codes };
var bar = foo(2);
bar + 2 // result: 4
bar(2) // result: 4
bar(2)(2) // result: 6
변수에는 하나의 값만 포함될 수 있습니다. 이 값은 함수가 될 수 있습니다.
개체에는 수행하려는 작업을 수행하기 위해 해킹 당할 수있는 toString()
메서드가있을 수 있습니다.
function myFactory(value) {
function myFunction(add) {
return myFactory(value + add);
}
myFunction.toString = function() {
return value;
};
return myFunction;
}
var bar = myFactory(2);
console.log(bar + 2);
console.log(bar(2));
console.log(bar(2)(2));
이것은
물론, 끔찍한.커링은 함수를 반환하여, 자바 스크립트에서 수행 할 수 있습니다. 기본적으로 변수는 값 (리터럴 또는 함수 결과)이거나 함수 선언 일 수 있습니다.
function add(number) {
return function(number2) {
return number + number2;
}
}
console.log(add(5)(6));
는 bar + 2
을 설명 무엇을 달성 할 수있는 방법이 있습니다,하지만 틀에 얽매이지 않는, 그리고 내 의견으로는, 당신은 자바 스크립트를 사용하지 않아야합니다.
'add + 2'는'4'를주지 않을 것이다. 암호. – Quentin
나는 Quetin의 대답에서 영감을 얻었다 내가 이상한 나오지 않는 로그 결과를 인정하지만 의도 한대로 작동 valueOf 재산
var foo = function(n) {
var fn = function(x) {
return foo(n + x);
};
fn.valueOf = function() {
return n;
};
return fn;
}
var bar = foo(2);
console.log(bar + 2 === 4, bar);
console.log(bar(2) === 4, bar(2));
console.log(bar(2)(2) === 6, bar(2)(2));
을 발견했다.
'bar + 2 = 4'의 경우'bar.toString'을 덮어 써야하므로'2'를 반환하지만 좋은 생각처럼 들리지는 않습니다. – Kaiido
너는 할 수있다,이 기사를 체크 아웃해라. http://www2ality.com/2011/12/fake-operator-overloading.html –