이 블록은 :
for (zzz = 0; zzz < 3; zzz++) {
lines = d3.line()
.x(function(d,i) { console.log(zzz); x([1,2,3]) })
.y(function(d,i) { console.log(zzz); y([1,2,3]) });
}
아무것도 기록하지 않습니다. 이 데모를 확인하십시오
for (zzz = 0; zzz < 3; zzz++) {
console.log("Outside d3.line, zzz is " + zzz);
lines = d3.line()
.x(function(d,i){console.log("Inside d3.line nothing is printed!");x([1,2,3]) })
.y(function(d,i){console.log("Inside d3.line nothing is printed!");y([1,2,3]) });
}
<script src="https://d3js.org/d3.v4.min.js"></script>
이유는 d3.line()
가 호출되지 않을 것입니다 (따라서, 그리고 콘솔에 아무것도 인쇄되지 않습니다). d3.line()
은 실제로 경로를 추가 할 때만 호출됩니다 (lines
사용). 이 시간이 지나면 for
루프가 완료되고 zzz
이 3입니다 (let
을 사용하면 2
이됩니다).
또한 3
을 세 번 받는다는 것은 우연의 일치입니다. for
루프가 0에서 2 (반복 횟수가 3 회)가된다는 사실과는 아무런 관련이 없습니다. 귀하의 피들에 lines
세 값을 가진 배열 : lines([1, 2, 3])
. 다음 데모에서는 각 기능에 대해 한 번만 zzz
을 인쇄합니다 :
var svg = d3.select("body");
var x = d3.scaleLinear().range([0, 100]);
var y = d3.scaleLinear().range([100, 0]);
for (zzz = 0; zzz < 3; zzz++) {
lines = d3.line()
.x(function(d,i) { console.log("first console.log: " + zzz); x([1,2,3]) })
.y(function(d,i) { console.log("second console.log: " + zzz); y([1,2,3]) });
}
svg.append("path").attr("d", lines([1]));
<script src="https://d3js.org/d3.v4.min.js"></script>
그래서, 간단히 말해서, 당신은 단지 for
루프 내에서 lines
을 정의하고 있습니다.