2014-04-09 10 views
5

일반 함수가 아닌 표현식에서 IIFE를 사용하는 일부 코드가 발생했습니다. 인생에 대한 이유는 무엇JavaScript 익명 함수 식 대 IIFE

var custom_type = function() { 
    return $('#myDiv').attr('custom_type'); 
}; 

:

var custom_type = (function() { 
    return $('#myDiv').attr('custom_type'); 
})(); 

일반적으로 내가 좋아하는 무언가로 이것을 쓰는 것? 내가 생각할 수있는 유일한 점은 IIFE가 처음에 custom_type 변수를 한 번만 할당하는 반면, 두 번째 변수는 변수가 참조 될 때마다 업데이트 된 유형을 계속 확인합니다.

+0

첫 번째 함수는 함수를 실행하고 결과를 저장하며 초는 함수를 정의로 저장합니다. – Rolice

+0

첫 번째 것은'var custom_type = $ ('# myDiv'). attr ('custom_type')'과 동일합니다.그래서 두 예제 모두 다른 결과를 가지고 있습니다. (첫 번째는'custom_type'은 문자열이고 두 번째는 함수입니다) 문맥없이 첫 번째 구문이 사용 된 이유를 알 수 없습니다. 아마도이 코드를 작성한 사람은'custom_type'을 함수로 사용하지 않을 것입니다. –

답변

5

, 당신은 완전히 기능을 생략하고 바로 수행 할 수 있습니다

은 일반적으로 그러나
var custom_type = $('#myDiv').attr('custom_type'); 

당신이 변수 할당의 더 복잡한 "적시"계산을 위해 목숨을 사용할 수 있습니다 - 내가 좋아하는 무언가를 반복 할 필요가있을 때 사용하기 때문에 현재 범위를 오염시키지 않고 i을 가질 수 있습니다. 두 번째 예에서

는하지만, 결과는 완전히 다른 - 당신은 코드의 첫 번째 조각이 한 번 그 가치를 얻을 것이다, 반면 현재 값을 가져 전화 기능 custom_type()에 필요하고 변수 것 그 가치를 유지할 것입니다.

+0

그게 더 좋은 질문이었습니다. 왜 IIFE가'.attr'에 그것을 할당하는 대신에 직접 값을 반환 하는지요. 불필요하게 복잡해 보입니다. – diplosaurus

1

실제로 (즉시 호출되는 함수 표현식) IIFE가 실행되므로 변수가 응답으로 설정됩니다. http://jsfiddle.net/Y4JmT/1/

코드 여기 :

iife = foo 
: 당신이 비슷한을 볼 수 있습니다 당신의 JS 콘솔에서

var custom_type = (function() { 
    return 'foo'; 
})(); 

var custom_type2 = function() { 
    return 'bar'; 
}; 

console.log('iife = ' + custom_type); 
console.log('non-iife = ' + custom_type2); 

여기이를 보여주기 위해 JSFiddle의 출력에 대한 JS 콘솔을보고

non-iife = function() { 
    return 'bar'; 
} 
이 예에서210
2

첫 번째 사용자 (IIFE)가 함수를 실행하고 그 결과를 저장하면 초가 함수를 정의로 저장합니다. 당신은 정상 funciton에 같은 호출하고 있습니다

(function(x) { 
    return x * 2; 
})(5); 

: 대신 함수 이름, FUNC (ARG1, ARG2는) 당신은 전체 함수 정의를 전달하기 때문에 위의 반환 같은 :

function multiply(x) { 
    return x * 2; 
} 

multiply(5); 

그들은 같은 것을 의미합니다. 전화를 걸고 있습니다. 첫 번째 가능성은 낮지 만 두 번째 정의는 호출에 더한 것입니다.