2014-09-09 3 views
1

이 예제는 "dom scripting"이라는 책 - jeremy keith에서 가져온 것입니다. 너무 많은 연결이 줄재귀 함수의 인수 연결

var repeat = "moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")"; 

답변

1

var repeat 오히려 기능 자체보다, 실제로는 함수 호출의 문자열 표현입니다 그것 때문에 거기에 왜

function moveElement(elementID,final_x,final_y,interval) { 
if (!document.getElementById) return false; 
if (!document.getElementById(elementID)) return false; 
var elem = document.getElementById(elementID); 
var xpos = parseInt(elem.style.left); 
var ypos = parseInt(elem.style.top); 
if (xpos == final_x && ypos == final_y) { 
return true; 
} 
if (xpos < final_x) { 
xpos++; 
} 
if (xpos > final_x) { 
xpos--; 
} 
if (ypos < final_y) { 
ypos++; 
} 
if (ypos > final_y) { 
ypos--; 
} 
elem.style.left = xpos + "px"; 
elem.style.top = ypos + "px"; 
var repeat = "moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")"; 
movement = setTimeout(repeat,interval); 
} 

이해가 안 돼요.

당신은 같은 것을 할 것 (문자열을 사용하지 않는) 코드에서 같은 일을 수행합니다 repeatmoveElement 기능의 호출을 포함

var repeat = function() { moveElement(elementId, final_x, final_y, interval); } 
    movement = setTimeout(repeat, interval); 
+0

왜 안되나요? move = setTimeout ("moveElement (elementId, final_x, final_y, interval)", interval); –

+0

변수 이름에 포함 된 데이터가 아닌 변수의 이름을 전달하기 때문에 그렇게해서는 안됩니다. 그 중 함수의 문자열 표현을 전달하는 것은 좋은 코드 연습이 아닙니다. – Matt

0

때문입니다. 함수에 전달되는 인수는 ,으로 구분해야합니다. 그래서 우리는 변수의 값을 코마로 연결하여 함수를 호출 할 문자열을 얻습니다. moveElement

1

이것은 함수를 호출하는 이상한 방법입니다. setTimeout 및 setInterval의 첫 번째 인수로 string을 사용하지 말아야하며 이런 종류의 예제를 사용하여 책을 읽지 않는 것이 좋습니다.

정확한 방법은 원하는 함수 호출과 함께 외딴 함수를 전달하는 것입니다.

+0

DOM 스크립팅에 관한 좋은 책을 추천 할 수 있습니까? –

+0

죄송합니다. 돔 스크립팅에 대한 책을 읽은 적이 없으므로 좋은 스크립트를 모릅니다. 코드 작성 방법을 배우는 나의 방법은 항상 책이 아닌 코드를 읽고 쓰는 것이 었습니다. 모범 사례와 코딩 스타일부터 시작하는 것이 좋습니다. 많은 스마트 프로그래머 경험에서 필수적이기 때문에 좋습니다. 코드 작성 방법을 배우는 가장 좋은 방법은 오픈 소스 코드를 읽고 기여하는 것입니다. – Anatoliy