当我这样做时,我遇到了这个问题:
var y;
var x;
function move(e) {
var x=e.x;
var y=e.y;
}
var a=y-600;
alert(a);
当我这样做时,输出是:
a=NaN
答案 0 :(得分:3)
var a=undefined-600
会产生NaN
因为y未分配任何内容undefined
,从中减去600会给您NaN(not a number)
看来你需要一个Asign "y" some value
,之后你会在move()
中找到它的内容
更新@Jits评论:此外,move()函数有x,y作为局部变量,它们不会影响全局x,y
答案 1 :(得分:1)
函数move(e)
永远不会在您的代码段中调用,因此变量y不会从其初始值undefined
更改。
此外,在函数move(e)
的范围内,您声明了一个新的局部变量var y
,它覆盖了全局范围中的var y
。这意味着局部变量y
已更改,全局变量y
保持undefined
。
undefined - 600
是NaN
。
var y;
var x;
function move(e) {
x=e.x; // manipulate the variables from the surrounding scope,
y=e.y; // instead of creating new, local variables
}
move({x:700, y:700}); // actually call the move function
var a=y-600;
alert(a); // should output "100"
答案 2 :(得分:0)
函数move(e)与此代码无关,因为您没有在任何地方使用它。
至于NaN的原因,你是从已声明但未赋值的变量中减去600.
答案 3 :(得分:0)
答案 4 :(得分:0)
您在x
中声明了新的本地变量y
和move
,并且需要初始化包含属性e
的某些值的对象x
和y
,用于更新外部变量。你应该重新考虑逻辑,但这将有效:
var y;
var x;
function move(e) {
x=e.x;
y=e.y;
}
var e = {x: 1000, y:700};
move(e);
var a = y-600;
console.log(a); // 100
答案 5 :(得分:0)
首先,你在这里创建了两种变量,这有点令人困惑,而不是一个很好的练习!
全局变量x& y
局部变量x& y内部功能移动(e)
尽量避免这种情况,因为随着代码的增长,它变得难以管理。 来到你的问题全局变量y被声明并且没有初始化,这意味着浏览器引擎在解析时不知道分配给y的内容,因此它将undefined设置为此变量,因此对此变量的计算将是NaN(不是数字) 。并且必须在某处调用函数move(e)来执行函数中包含的任务。
答案 6 :(得分:-1)
y未定义,因此无法计算y-600。