2009-11-01 3 views
1

다음 코드에서는 baz를 호출 할 수 있습니다. 또한 다른 곳에서는 "JavaScript에 기능 수준 범위가 있습니다"라고 읽었습니다. 나는 알고있다, 나 자신을 어딘가에서 혼란시킨다. 누군가 제발 이해시켜 줄 수 있어요?클로저 내부에 정의 된 함수를 호출 할 수 있습니까?

/* An anonymous function used as a closure. */ 
var baz; 
(function() { 
    var foo = 10; 
    var bar = 2; 
    baz = function() { 
     return foo * bar; 
    }; 
})(); 

baz(); // baz can access foo and bar, even though it is executed outside of the 
     // anonymous function 

.

답변

4

변수 baz은 함수 식을 사용하여 값을 할당 할 때까지 실제로 정의되지 않은 경우에도 익명 함수 외부에서 선언됩니다. 이것은 그 기능을 그 범위 밖에 둔다.

foobar은 익명 함수 내에서 선언되므로 해당 함수로 범위가 제한됩니다. baz에 지정된 기능은 해당 기능이 작성되었을 때 범위에 있었기 때문에 액세스 할 수 있습니다.

0

데이비드가 설명했다. baz을 정의하는 범위에있는 항목은 익명의 함수가 반환 된 후에도 계속 사용할 수 있습니다.

자세한 내용은 closures을 참조하십시오.

관련 문제