js 문제 해석

3229 단어 js
오늘 채팅방에서 어떤 사람이 js 문제를 물어봤는데, 지금 열거하여 다른 사람이 참고할 수 있도록 한다.
Function.prototype.curry=function(){
    var slice=Array.prototype.slice,
        args=slice.apply(arguments),
        that=this;
    return function(){
        console.log(args.concat(slice.apply(arguments)))
         return that.apply(null, args.concat(slice.apply(arguments)) );
    }  
}
function add(a,b){
   return a+b;
}
var q=add.curry(10);
q(2)

, :( : 。)

Function.prototype.curry=function(){
    var slice=Array.prototype.slice,
        args=slice.apply(arguments),//  , concat
        that=this;
    return function(){
         var param = slice.apply(arguments).concat(args);
         console.log(param)
         return that.apply(null, param );
    }  
}
function add(a,b){
   return a+b;
}
var q=add.curry(10);
q(2)

 
분석:
우선 추가합니다.curry(10);,curry는 최종적으로 하나의 function을 되돌려주었고 이 function은 패키지입니다. (내부에서 사용하는 변수 이름은 위add의 변수이기 때문에 인용했지만 변수를 방출하지 않습니다): var slice=Array.prototype.slice;//slice 방법을 사용할 것입니다. 여기에서args=slice를 간략하게 인용합니다.apply(arguments),//add 함수의 매개 변수를 수조로 바꾸어 수조의concat 방법that=this;//add의 인용을 저장합니다.실행 q(2) 내부 실행 과정: var param = slice.apply(arguments).concat(args);분명히 여기 slice와args는 모두add 함수의 인용 (패키지 닫기 사용) 이고,arguments는 q의 매개 변수입니다.의미: q의 매개 변수는 수조의 슬라이스 방법을 호출한 다음에 앞에add를 저장한args 수조와 연결합니다.return that.apply(null, param ); 현재 새 수조[2,10]는 매개 변수로add를 호출하는 방법 (that의 인용) 으로 결과를 되돌려줍니다.

좋은 웹페이지 즐겨찾기