2013-07-16 2 views
1
$grid.find('div.bb-bookblock').each(function(i) 
{        
    var $bookBlock = $(this), 
     $nav = $bookBlock.next(), 
     $navNext = $nav.find('.bb-nav-next'), 
     $navPrev = $nav.find('.bb-nav-prev'), 
     $navFirst = $nav.find('.bb-nav-first'), 
     $navLast = $nav.find('.bb-nav-last'), 
     $playStop = $nav.find('.bb-nav-play-stop'), 
     isPlaying = false, 
     autoplayTimer = null, 
     bb = $bookBlock.bookblock( 
     { 
      speed : 600, 
      shadows : false 
     }); 

}); 

.each 함수 내의 모든 변수는 루프 내부에만 범위가 있습니까? 예를 들어, autoPlayTimer는 setInterval의 결과입니다. 내가 변수를 덮어 쓰지 않도록하고 싶다. 확인 작업을 것 같다,하지만 난 단지 $.eachbecause of the callback that is a function의 범위에서 사용할 수 있습니다 내가 자바 스크립트jQuery.each 및 변수 범위

답변

4

$().each 변수를 이해하고 있는지 확인 functional scope.

그래서 모든 변수가 로컬 내부에 선언합니다.

$grid.find('div.bb-bookblock').each(function (i) { 
    var $bookBlock = $(this), 
     $nav = $bookBlock.next(), 
     autoplayTimer = null; 

    bb = $bookBlock.bookblock({ 
     speed: 600, 
     shadows: false 
    }); 
    console.log($bookblock) // logs the current jQuery object in iteration 
    console.log($nav) // logs the next element 
    console.log(autoplayTimer) // null or the value if available 
}); 

console.log($bookblock) // undefined 
console.log($nav) // undefined 
console.log(autoplayTimer) // undefined 
2

함수에 정의 된 변수는 항상이 함수의 범위에 속합니다. 이것은 각()의 문제가 아니라 function(i) {...}의 문제입니다.