我每次单击按钮时都会尝试更改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 && 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);
});
答案 0 :(得分:4)
这确实是一个范围问题。您正在重新定义Update test
set UserDATE = convert(nvarchar(10), convert(date, replace(UserDate, '/', ' '), 100), 105)
函数范围内的curPos
变量,方法是在其前面添加viewRotate
标记。请尝试以下操作,对已在var
的“父”范围中定义的curPos
执行分配:
viewRotate
在此之后,正如@PaulRoub指出的那样,您需要重新定义函数签名以删除function viewRotate(reqPos) {
curPos = reqPos;
// ...
}
参数,因为基元是按值传递的:
curPos
答案 1 :(得分:1)
这实际上是阴影变量的问题:
var reqPos = 0,
curPos = 0;
function viewRotate(curPos, reqPos){
此时您已失去对全球curPos
和reqPos
的访问权限。重命名这些局部变量是一种方法。
另一种是在函数中本地处理数据,返回它并在click
处理程序中进行赋值。
答案 2 :(得分:0)
您重新定义了curPos
函数中的viewRotate()
变量,这将使本地范围内的全局curPos
变量蒙上阴影:
var reqPos = 0,
curPos = 0; // <- Defining variable here
function viewRotate(curPos, reqPos){
var curPos = reqPos; // <- Redefining it here
...
您应该完全重命名或删除curPos
功能中的本地viewRotate()
变量。
答案 3 :(得分:0)
在您的函数之外定义的变量 curPos 与您在函数中定义的 curPos 不同,即使它们具有相同的名称。
JavaScript将全局变量 curPos (在函数外部)与本地变量 curPos (在函数内)分开。具有相同的名称不会使它们成为相同的变量。
要从您的函数内部访问全局 curPos ,请删除“var”关键字,如@sdgluck建议的那样。否则,你最终会在函数中创建一个全新的局部变量,它恰好与你的一个全局变量同名。
但话说回来,如果您需要做的只是
在每次点击时将全局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 );
});