如何使用Javascript进行计算?
上述JavaScript代码不会返回预期结果(如代码中的注释所示)。有人请帮我更正代码吗?这似乎是一种非常讨厌的做事方式 我个人会这样做:如何使用Javascript进行计算?,javascript,Javascript,上述JavaScript代码不会返回预期结果(如代码中的注释所示)。有人请帮我更正代码吗?这似乎是一种非常讨厌的做事方式 我个人会这样做: i = 3; j = 2; function domath(x) { i = 4; j = 1; return i*x + j; } j = domath(i) - j; alert(j); //expected result = 11 k = domath(i) + j; alert(k); //expected result
i = 3;
j = 2;
function domath(x) {
i = 4;
j = 1;
return i*x + j;
}
j = domath(i) - j;
alert(j); //expected result = 11
k = domath(i) + j;
alert(k); //expected result = 15
如果你真的必须在任何地方使用相同的变量,至少要这样做:
var v1;
var v2;
function math(x){ //do math here then return}
alert(math(1))
此外,有意义的变量名称将使您保持良好的状态,使用var而非global也将帮助您 使用
var
声明变量:
var i = 3;
var j = 2;
function domath(x) {
var i = 4;
var j = 1;
return i*x + j;
}
由于您没有使用
var
,因此在第一行中定义的变量i
和j
实际上与在domath()函数中定义的变量相同
试试这个:
var i = 3;
var j = 2;
function domath(x) {
var i = 4;
var j = 1;
return i * x + j;
}
附言:为了使代码更具可读性,改变变量名可能是一个好主意问题是您正在覆盖全局变量,也就是说,把数学搞砸了:
i = 3;
j = 2;
function domath(x) {
var i = 4;
var j = 1;
return i*x + j;
}
j = domath(i) - j;
alert(j); //expected result = 11
k = domath(i) + j;
alert(k); //expected result = 15
var i = 3;
var j = 2;
function domath(x) {
var i = 4;
var j = 1;
return i*x + j;
}
var x = domath(i) - j; // overwriting J will change your next expected result
alert(x); //expected result = 11
var k = domath(i) + j;
alert(k); //expected result = 15
此表达式从左到右求值。调用domath()
将为i
和j
分配新值,因此此处的有效代码如下:
j = domath(i) - j;
因此,一旦完成此操作,j
将设置为12
,这实际上不是11
。此外,i
的值为4
要在函数中使用局部变量,必须重新声明它们,本质上隐藏在此范围之外的全局变量:
j = (i = 4) * 3 + 1 - 1;
这一次,第一次分配将解决此问题,因为domath()
不会接触i
和j
分配到外部:
function domath(x) {
var i = 4;
var j = 1;
return i * x + j;
}
完成此操作后,j
将设置为11
,正如预期的那样
为了避免此类问题,最好在定义新变量时始终使用var
(无论如何,在编写strict
代码时必须这样做),并且不要使用这么短的变量名。我会考虑将一个字符变量名限制在迭代器和其他非常有限的范围内。永远不要因为某件事情是全球性的。例如,你并没有在var i=3的任何地方实际标记它们!第一件事:范围界定。除非您声明一个var
,否则该变量将被创建为全局变量。这是一件坏事,在严格模式下是不允许的。//expected result=11
使用变量作用域是错误的
j = 4 * 3 + 1 - 2