2014-04-17 3 views
1

파라미터와 내부 기능 :JS 인생 내가 더욱 상세 난이 상황 마련 몇몇 코드를 테스트 한 후 JS보고 시작하고

var hello = function() 
    { 
     console.log(arguments); 
     return (function(x,y){console.log(arguments);return x*y;}); 
    }(); 
console.log(hello(2,5)); 

다음 콘솔에서 출력된다 :

[object Arguments] { ... } 
[object Arguments] { 
    0: 2, 
    1: 5 
} 
10 

누군가 내 머리를 잡지 못해서 행동을 설명해 주실 수 있습니까?

나는 첫 번째 함수가 IIFE이고 그것이 생성 될 때 즉시 실행된다는 것을 알고 있습니다. 내 유일한 문제는 전달 된 매개 변수를 내부 함수에 전달하는 방법입니다.

var hello = function() 
    { 
     console.log(arguments); 
     return (function(x,y){ 
      console.log(arguments); 
      return x*y; 
     }); 
    }(); 
console.log(hello(2,5)); 

첫째, 함수로 IFFE을 분할거야 :

정보에 미리 감사와

+0

어떻게? 당신은 당신이 돌아 오는 기능에 그들을 전달하고 있습니다. – Johan

답변

2

좋아 코멘트, 당신이 랩을 해제 할 수 있다면 나를 보자 성명서. 그것은 동일하게 작동하지만, 더 전통적인 코드처럼 될 것입니다 :

// Create our function 
function action(x, y) { 
      console.log(arguments); 
      return x*y; 
} 

var hello = function() 
    { 
     console.log(arguments); 
     //Here we are returning a REFERENCE to a function that already exists. 
     // We are *not* running the `action` function -- just getting its 
     // reference so it can be called later. 
     return action; 
    }(); 

// At this point in time, if you did a 
console.log(hello) 

// You'd see that it just points to the `action` function -- since that is what the 
// IIFE returned. 

console.log(hello(2,5)); 

hello는 지금 우리 action 기능입니다. 그것은, 익명 함수 당신이 이름을 사용하거나 전역 객체의 혼란을하지 않기 때문에

  • :

    IFFE 구문은 다음과 같은 장점이 있습니다.

  • 코드는 두 개의 개별 조각으로 분리되는 것이 아니라 "인라인"방식입니다. 나는 function statementfunction expression의 차이를 설명 할 경우

는, 그런데, 도움이 될 수 있습니다.

함수 문은 다음과 같습니다

function functionStatemnt() { 
... 
} 

functionStatement 완료 컴파일에서 사용할 수 있습니다. 이 코드는 사용 가능하기 위해 실행될 필요가 없습니다.

var functionExpression = function() { 
... 
}; 

와 IFFE 즉시 호출하는 기능 식입니다

함수의 표현은 더 좋아합니다. 범위를 만들고 변수를 숨길 수있는 방법을 알려줍니다.

var myCounter = function() { 
    var counter = 0; 
    return function() { 
    return counter++; 
    } 
} 

console.log(myCounter()); 
console.log(myCounter()); 
console.log(myCounter()); 
+0

대단히 감사합니다. – ghili

+0

익명의 기능과 종료에는 미친 힘이 있습니다. 그러나 머리를 감싸는 데는 약간의 노력이 필요합니다. 다행히 도울 수있어. –