2016-11-30 1 views
0

은 다음과 같이 자바 스크립트로 코딩 할 수 있습니다 :자바 스크립트는 변수가 값이고 함수가 될 수 있습니까?

var foo = function(n) { //magic codes }; 
var bar = foo(2); 

bar + 2  // result: 4 
bar(2)  // result: 4 
bar(2)(2) // result: 6 
+1

'bar + 2 = 4'의 경우'bar.toString'을 덮어 써야하므로'2'를 반환하지만 좋은 생각처럼 들리지는 않습니다. – Kaiido

+0

너는 할 수있다,이 기사를 체크 아웃해라. http://www2ality.com/2011/12/fake-operator-overloading.html –

답변

4

변수에는 하나의 값만 포함될 수 있습니다. 이 값은 함수가 될 수 있습니다.

개체에는 수행하려는 작업을 수행하기 위해 해킹 당할 수있는 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));

이것은

물론, 끔찍한.

2

커링은 함수를 반환하여, 자바 스크립트에서 수행 할 수 있습니다. 기본적으로 변수는 값 (리터럴 또는 함수 결과)이거나 함수 선언 일 수 있습니다.

function add(number) { 
 
     return function(number2) { 
 
     return number + number2; 
 
     } 
 
    } 
 

 
    console.log(add(5)(6));

bar + 2을 설명 무엇을 달성 할 수있는 방법이 있습니다,하지만 틀에 얽매이지 않는, 그리고 내 의견으로는, 당신은 자바 스크립트를 사용하지 않아야합니다.

+1

'add + 2'는'4'를주지 않을 것이다. 암호. – Quentin

0

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

을 발견했다.

관련 문제