여기에 몇 가지가 있습니다. 이것은 자신의 범위에 약간의 자바 스크립트 코드를 실행하는 방법을 제공
(function() {
// Some code
})();
: 첫 번째는 immediately invoked function expression (인생) 패턴이다. 함수 내에서 생성 된 모든 변수가 전역 범위에 영향을주지 않도록 일반적으로 사용됩니다. 대신이를 사용할 수 있습니다
function foo() {
// Some code
}
foo();
그러나 이것은 항상 필요하지 않은 기능에 이름을 부여해야합니다. 명명 된 함수를 사용한다는 것은 미래의 어떤 시점에서 함수가 다시 호출 될 수 있다는 것을 의미하기 때문에 바람직하지 않을 수 있습니다. 이 방식으로 익명의 함수를 사용하면 한 번만 실행됩니다.
이 구문이 잘못되었습니다 :
function() {
// Some code
}();
당신이 그것을 표현으로 분석하기 위해 괄호의 기능을 포장해야하기 때문에. 자세한 내용은 여기에 있습니다 : 자신의 범위 내에 그냥 인라인으로 기록 된 것처럼,
(function() {
// Some code
})();
이 있습니다 즉시 실행해야 할 '몇 가지 코드'만 : 그래서
http://benalman.com/news/2010/11/immediately-invoked-function-expression/은 인생의 패턴을 신속하게 요약하자면 전역 네임 스페이스에 영향을 미치지 않도록 (따라서 다른 스크립트를 방해하거나 간섭 할 수 있음).
당신은 마찬가지로 함수에 인수를 전달할 수 있습니다
당신 것 정상적인 기능, 예를 들어,
(function(x) {
// Some code
})(1);
그래서 우리는 가치를 전달하는 '1'을받는 함수의 첫 번째 인수로
x로 명명 된 지역적으로 범위가 지정된 변수로. delete 연산자는 객체에서 속성을 제거합니다
delete x;
return x;
:
둘째, 당신은 기능 코드 자체의 내장을 가지고있다. 변수를 삭제하지 않습니다. 그래서; 이것에
var foo = {'bar':4, 'baz':5};
delete foo.bar;
console.log(foo);
결과가 기록되고 : 푸 변수 아닌 속성 때문에
var foo = 4;
delete foo;
console.log(foo);
이 값 4를 기록 할 것 등이 될 수 없다
{'baz':5}
반면 삭제됨
많은 사람들은 자동 전역 (autoglobals)이 작동하는 방식 때문에 삭제가 변수를 삭제할 수 있다고 가정합니다. 당신이 변수를 삭제하지 있기 때문에,
bar = 4; // Note the lack of 'var'. Bad practice! Don't ever do this!
delete bar;
console.log(bar); // Error - bar is not defined.
이번에 삭제 작동하지만 : 당신이 먼저 선언하지 않고 변수에 할당하는 경우, 실제로 변수지만, 전역 객체의 속성이되지 않습니다 전역 객체의 속성
window.bar = 4;
delete window.bar;
console.log(window.bar);
그리고 지금 당신은 foo는 개체의 예 아니라 foo는 변수 예와 유사 얼마나 볼 수 있습니다 : 실제로, 이전의 조각이 동일합니다.
이것은 IIFE입니다. 자세한 내용은 http://www.markupjavascript.com/2016/07/what-are-immediately-invoked-function.html –