2017-02-12 14 views
-2

함수 표현식을 로깅하면 호출을하지 않고 함수를 실행하는 이유는 무엇입니까?

function mapForEach(arr, fn) { 

    var newArr = []; 
    for (var i = 0; i < arr.length; i++) { 
    newArr.push(
     fn(arr[i]) 
    ) 
    }; 

    return newArr; 
} 

var arr1 = [1, 2, 3]; 

mapForEach(arr1, function (item) { 
    return item * 2; 
}); // [2,4,6] 

의해 호출 콘솔

console.log(arr2); // [2,4,6] in the console 
,536,913에 기록 할 때 호출이 변수 선언 아직

var arr2 = mapForEach(arr1, function (item) { 
    return item * 2; 
}); 

호출되지이 함수

여기에 호출이 필요하지 않은 이유는 무엇입니까? 이 로그 함수 호출

function foo() { return 2 === 2 }; 

로그 함수 정의

console.log(foo); // function foo() { return 2 === 2 } 

어떻게 다른지

console.log(arr2()); 

내가 아직 명확하지 않다, 로그 값

console.log(foo()); // true 
+7

*이 변수 선언에 의해 * 호출되기 때문에. 왜 다르게 생각하니? 결과를'arr2'라는 이름에 할당하는 것입니다. 함수를 할당한다고 생각한다면 왜 배열로 지었습니까? – jonrsharpe

+0

이름을 밝히지 않았고, 배우고 배우려고합니다. Javascript에 대한 완벽한 지식을 가지고 태어나지 않는 한 일어날 수있는 과정입니다 (나는 그렇지 않았습니다). 나는 반환 값의 할당이 arr2()와 같은 선언 이후에 이제는 일어날 때까지 메모리에 존재하지 않는다고 생각했다. arr2()는 동 기적으로 프로그램 실행시 줄 아래로 사용할 수있다. 그래서 나는 console.log (arr2)가 함수 정의를 기록 할 것으로 예상했다. 다행스럽게도 우리는 스택 오버플로와 같은 것들을 가지고 있습니다. 여기서 우리는 우리가하는 질문과는 대조적으로, 우리가 아직 대답하지 않은 질문을 할 수 있습니다 ...? – nSideOut

+0

그것은 당신이 snarky되는 데 도움이되지 않습니다. "왜 다르게 생각하니?"라는 질문은 당신의 오해가 어디에 놓여 있는지를 밝히기 위해 탐색 적입니다. 그래서 당신이 책을 읽도록 지시하는 대신에 직접적으로 그 문제를 해결할 수 있습니다 (당신의 오해, 그러나 당신이 가지고있는 특정한 문제점을 위해 또한 거의 쓸모 없 일반이다). – Amadan

답변

0

I를 반환 여기서 무슨 일이 일어나는 지 생각해 봐. JavaScript 콘솔의 동작 또는 var 선언의 반환 값에 약간의 혼란이 있습니다.

콘솔에는 항상 입력 한 값이 표시됩니다. 함수 호출의 반환 값. 그러나의 반환 값은 var이고 undefined입니다. 즉, 할당이없는 mapForEach에는 [2,4,6]이 표시되지만 실제로는 두 경우 모두이 함수가 호출됩니다. 이는 단지 var arr2 =과 함께 표시됩니다.

var 선언의 반환 값에 대한 자세한 내용은 this question을 참조하십시오.

+1

약간의 수정 : "할당의 반환 값은'undefined'"가 참이 아닙니다 ('arr2 = [2, 4, 6]'은'[2, 4, 6]'로 평가됩니다); "var arr = [2, 4, 6]'은 콘솔에서'undefined'로 평가되며, 프로그램의 lvalue조차도 될 수 없습니다). – Amadan

+0

많은 감사 @Amadan - 나는 나의 대답이 과제의 가치가 사용될 수있는 상황에서 주어진 자리에 있지 않다는 느낌이 들었습니다. 그러나 OP의 예를 기반으로 설명하려고했습니다. 명확하게 답변을 업데이트합니다! – mikej