Javascript 更改全局变量
每次我点击一个按钮,我都试图改变一个var值。但由于某种原因,var值不断变回0。不确定这是否是范围问题 尝试在每次单击时将全局var curPos更新为reqPos值 请参阅下面的代码Javascript 更改全局变量,javascript,Javascript,每次我点击一个按钮,我都试图改变一个var值。但由于某种原因,var值不断变回0。不确定这是否是范围问题 尝试在每次单击时将全局var curPos更新为reqPos值 请参阅下面的代码 var reqPos = 0, curPos = 0; function viewRotate(curPos, reqPos){ var curPos = reqPos; console.log('1 ' + reqPos + curPos); if(curPos === 0 &am
var reqPos = 0,
curPos = 0;
function viewRotate(curPos, reqPos){
var curPos = reqPos;
console.log('1 ' + reqPos + curPos);
if(curPos === 0 && reqPos === 12) {
for(var j = 0; j < reqPos; j++){
curPos++;
}
curPos = reqPos;
}
else if (curPos === 0 && reqPos === 24) {
for(var j = 0; j < reqPos; j++){
curPos++;
}
curPos = reqPos;
}
else if (curPos === 0 && reqPos === 36) {
for(var j = 0; j < reqPos; j++){
curPos++;
}
curPos = reqPos;
}
}
e('.btn-front').click(function(){
viewRotate(curPos, 0);
console.log(reqPos);
});
e('.btn-right').click(function(){
viewRotate(curPos, 12);
console.log(reqPos);
});
e('.btn-back').click(function(){
viewRotate(curPos, 24);
console.log(reqPos);
});
e('.btn-left').click(function(){
viewRotate(curPos, 36);
console.log(reqPos);
});
var reqPos=0,
curPos=0;
功能视图旋转(curPos、reqPos){
var curPos=reqPos;
控制台日志('1'+reqPos+curPos);
如果(curPos==0&&reqPos==12){
对于(var j=0;j
这确实是一个范围问题。通过在var
标记前面添加curPos
变量,可以在viewRotate
函数的作用域内重新定义该变量。尝试以下操作对已在viewRotate
的“父”范围中定义的curPos
执行赋值:
function viewRotate(reqPos) {
curPos = reqPos;
// ...
}
正如@PaulRoub所指出的,在原语按值传递时,需要重新定义函数签名以删除curPos
参数:
function viewRotate(reqPos) { /*...*/ }
viewRotate(0); // Now call without `curPos`
这确实是一个范围问题。通过在
var
标记前面添加curPos
变量,可以在viewRotate
函数的作用域内重新定义该变量。尝试以下操作对已在viewRotate
的“父”范围中定义的curPos
执行赋值:
function viewRotate(reqPos) {
curPos = reqPos;
// ...
}
正如@PaulRoub所指出的,在原语按值传递时,需要重新定义函数签名以删除curPos
参数:
function viewRotate(reqPos) { /*...*/ }
viewRotate(0); // Now call without `curPos`
这实际上是一个隐藏变量的问题:
var reqPos = 0,
curPos = 0;
function viewRotate(curPos, reqPos){
此时,您已经无法访问全局curPos
和reqPos
。重命名这些局部变量是一种方法
另一种方法是在函数中本地处理数据,返回数据并在
单击处理程序中进行赋值。实际上是隐藏变量的问题:
var reqPos = 0,
curPos = 0;
function viewRotate(curPos, reqPos){
此时,您已经无法访问全局curPos
和reqPos
。重命名这些局部变量是一种方法
另一种方法是在函数中本地处理数据,返回数据并在单击处理程序中执行赋值。您在viewRotate()
函数中重新定义了curPos
变量,该变量将覆盖本地范围内的全局curPos
变量:
var reqPos = 0,
curPos = 0; // <- Defining variable here
function viewRotate(curPos, reqPos){
var curPos = reqPos; // <- Redefining it here
...
var reqPos=0,
curPos=0;// 您在viewRotate()
函数中重新定义了curPos
变量,该变量将覆盖局部范围内的全局curPos
变量:
var reqPos = 0,
curPos = 0; // <- Defining variable here
function viewRotate(curPos, reqPos){
var curPos = reqPos; // <- Redefining it here
...
var reqPos=0,
curPos=0;// 函数外部定义的变量curPos与函数内部定义的变量curPos不同,即使它们具有相同的名称
JavaScript将全局变量curPos(函数外部)与局部变量curPos(函数内部)分开。使用相同的名称不会使它们成为相同的变量
要从函数内部访问全局curPos,请删除@sdgluck建议的“var”关键字。否则,您将在函数中创建一个全新的局部变量,该变量恰好与一个全局变量同名
但话说回来,如果你需要做的只是
每次单击时,将全局var curPos更新为reqPos值
那你就不能用一些简单的代码吗?比如
var curPos = 0;
function viewRotate( _reqPos ) {
curPos = _reqPos;
}
e('.btn-front').click(function(){
viewRotate( 0 );
});
e('.btn-right').click(function(){
viewRotate( 12 );
});
e('.btn-back').click(function(){
viewRotate( 24 );
});
e('.btn-left').click(function(){
viewRotate( 36 );
});
函数外部定义的变量curPos与函数内部定义的变量curPos不同,即使它们具有相同的名称
JavaScript将全局变量curPos(函数外部)与局部变量curPos(函数内部)分开。使用相同的名称不会使它们成为相同的变量
要从函数内部访问全局curPos,请删除@sdgluck建议的“var”关键字。否则,您将在函数中创建一个全新的局部变量,该变量恰好与一个全局变量同名
但话说回来,如果你需要做的只是
每次单击时,将全局var curPos更新为reqPos值
那你就不能用一些简单的代码吗?比如
var curPos = 0;
function viewRotate( _reqPos ) {
curPos = _reqPos;
}
e('.btn-front').click(function(){
viewRotate( 0 );
});
e('.btn-right').click(function(){
viewRotate( 12 );
});
e('.btn-back').click(function(){
viewRotate( 24 );
});
e('.btn-left').click(function(){
viewRotate( 36 );
});
调用函数时,reqPos
等于零,函数不会将curPos
更改为任何其他值。这确实是一个范围问题。@Hoten是的,但即使已修复,它仍然无法工作;该函数在开始时将curPos
设置为reqPos
,如果这些测试中的任何一个成功,则再次设置。var正在生成一个新变量。它屏蔽了外部curPos。了解到它可能是一个范围问题后,您采取了哪些步骤?因为这是对作用域的严重违反,简单地重命名可能会解决您的问题。您调用函数时,reqPos
等于零,并且该函数从未将curPos
更改为任何其他值。这确实是一个范围问题。@Hoten是的,但即使已修复,它仍然无法工作;该功能在开始时将curPos
设置为reqPos
,如果出现任何此类情况,则再次设置