Когда вы делаете это ...
.text(example(d, i, arg))
... вы немедленно вызываете example
(с переменными, которые не существуют) и передаете его результат методу text()
,что не то, что вы хотите.Как вы уже знаете ...
Обратите внимание, что без "arg" и вызова его как "example" это работает.
Это потому что ...
.text(example)
... совпадает с:
.text(function(d, i, n){
return example(d, i, n);
})
... где d
, i
и n
- аргументы по умолчанию, передаваемые анонимной функции.
Итак, если вы хотите использовать datum
и index
, переданные по умолчанию анонимной функции внутри метода text()
, вы должны заключить вызов example
внутри этой анонимной функции:
.text(function(d, i) {
return example(d, i, arg)
})
Вот ваш код с этим изменением:
<!doctype html>
<meta charset="utf-8">
<title>my first d3</title>
<body>
<script src="https://d3js.org/d3.v5.min.js"></script>
<script>
var data = [10, 20, 30, 40];
var arg = 10;
var lis = d3.select("body")
.append("ul")
.selectAll("li")
.data(data)
lis.enter()
.append("li")
.text(function(d, i) {
return example(d, i, arg)
})
function example(d, i, arg) {
var c = i + arg;
return "item n° " + c + " has value: " + d
}
</script>
</body>