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
上述JavaScript代码未返回预期结果(如代码中的注释所示)。请为我更正代码吗?
答案 0 :(得分:3)
由于您未使用var
,因此您在第一行中定义的变量i
和j
实际上与您在{{1}中定义的变量相同功能......
试试这个:
domath()
P.S:改变变量名称以使代码更具可读性是个好主意
答案 1 :(得分:1)
使用var
声明您的变量:
var i = 3;
var j = 2;
function domath(x) {
var i = 4;
var j = 1;
return i * x + j;
}
答案 2 :(得分:0)
这似乎是一种非常讨厌的做事方式。
我个人会这样做:
var v1;
var v2;
function math(x){ //do math here then return}
alert(math(1))
如果你真的必须在每个地方使用相同的变量,至少要这样:
var i = 3;
var j = 2;
function domath(x) {
var i = 4;
var j = 1;
return i*x + j;
}
同样有意义的varibles名称将让你保持良好的轨道,使用var而不是global也会帮助你!
答案 3 :(得分:0)
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
答案 4 :(得分:0)
问题是你是否覆盖了全局变量,即搞砸你的数学:
j = domath(i) - j;
此表达式从左到右进行评估。对domath()
的调用会为i
和j
分配新值,因此此处的有效代码为:
j = (i = 4) * 3 + 1 - 1;
一旦完成此操作,j
将设置为12
,而11
确实不是i
。此外,4
的值为function domath(x) {
var i = 4;
var j = 1;
return i * x + j;
}
。
要在函数中使用局部变量,您必须重新声明它们,基本上将全局变量隐藏在此范围之外:
domath()
这一次,第一项作业将解决此问题,因为i
无法触及j
和j = 4 * 3 + 1 - 2
在外面分配:
j
完成此操作后,11
将设置为var
,与预期一样。
为避免此类问题,在定义新变量时始终使用strict
是一种很好的做法(无论如何,当您想要编写{{1}}代码时,您必须这样做),而不是使用这种简短,不说明的变量名称。我考虑将单字符变量名的使用限制为迭代器和范围非常有限的其他东西。从来没有出现过全球化的事情。