Во-первых, это выглядит, как вы вводите глобальные переменные, так что я предложил бы использовать var
, чтобы предотвратить это от происходящего.
var year1 = y;
Далее, это трудно понять, но я думаю, что вы смущены о том, почему year1
имеет значение перед выполнением вашей анонимной функции и почему это undefined
внутри анонимной функции.
Проблема в том, что вы находитесь затенение другая переменная. Ваша анонимная функция принимает параметр с именем year1
circle.attr('cx', function(year1) {
...
Это означает, что вы объявили переменную с именем year1
внутри, что функции сферы. Всякий раз, когда вы объявляете переменную внутри области видимости, это объявление затеняет предыдущее объявление. Это означает, что это целая новая переменная и не коррелирует с предыдущей.
var x = 2;
function useGlobal() {
// No x is declared here so it grabs the next available x value
// which is the global one
console.log(x);
}
function hideX(x) {
// Here we've said that the function takes a parameter named x
// This means we can no longer access the outer variable named x
console.log(x); // undefined
}
function declareX() {
// Same thing as before, we've declared a new x so the old
// one is shadowed
var x = 500;
console.log(x);
}
useGlobal();
hideX();
declareX();
// Notice how declareX didn't change the original x
useGlobal();