2017-02-02 17 views
0

아래 작품; 그것은 당신이IIFE를 매개 변수로 사용하는 함수식? 당신이 dogName ('꾀 죄 죄')을 주석 경우 <pre><code>var dogName = function animalName(name) { console.log("My name is " + name); } dogName('Scruffy'); (function() { console.log("My name is Fido!"); })(); </code></pre> <p></p>을 의도 한대로

(function() { 
    console.log("My name is Fido!"); 
}()); //()) instead of)() 

에 인생을 조절하면 그것은 그 이름의 변수로 왜 기능적 표현이 인생을 사용합니까

My name is Fido! 
My name is undefined 

출력이

My name is function() { 
    console.log("My name is Fido!"); 
} 

를 출력하고, 왜 인생이다 마지막 예제에서 함수식 앞에 먼저 실행됩니까?

+1

, 그것은'기능 animalName (이름) {...} (기능 ...)'... 인생이된다. 'animalName'의 정의 뒤에';'를 붙이십시오. – deceze

+1

관련 : ['TypeError' :'console.log ('...')'는 함수가 아닙니다] (http://stackoverflow.com/q/31013221/4642212). – Xufox

답변

4

문제는 함수 식 끝에 세미콜론을 넣지 않는다는 것입니다. 코드는 기본적으로이로 해석됩니다 :

var dogName = function animalName(name) { 
    console.log("My name is " + name); 
}(function() { 
    console.log("My name is Fido!"); 
})(); 

지금까지 인터프리터, 당신은 다음 함수로 반환 값을 호출하려고 명명 된 함수 표현식에 첫 번째 인수로 함수를 전달하는 말할 수 있습니다.

이 문제를 해결하려면 세미콜론을 식 끝에 붙여 넣으십시오. 당신이 명확한 세미콜론을 포함하는 중간 줄을 주석으로 경우

var dogName = function animalName(name) { 
 
    console.log("My name is " + name); 
 
}; // <-- 
 

 
(function() { 
 
    console.log("My name is Fido!"); 
 
})();

+1

좋은 설명, 고마워요! – Chad