Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Javascript进行计算?_Javascript - Fatal编程技术网

如何使用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

上述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 = 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