function addNumbers(x,y) {
sum = x + y;
var sum;
return sum;
}
addNumbers(5,9);
alert(sum);
它说:未捕获的ReferenceError:未定义总和
当我在函数前加上“ var sum”时,它起作用。是什么原因?
答案 0 :(得分:6)
sum
仅在功能内内定义。要使用该函数的返回值,请直接执行以下操作:
function addNumbers(x,y) {
var sum;
sum = x + y;
return sum;
}
alert(addNumbers(5,9));
或
function addNumbers(x,y) {
var sum;
sum = x + y;
return sum;
}
var outerSum = addNumbers(5,9);
alert(outerSum);
还要注意,我将var sum;
移到了函数的顶部。与var
无关紧要(我为此写过a blog post),但这是更好的形式。 (与let
和const
无关,您应该使用它们代替var
。)
答案 1 :(得分:1)
仅在变量 scope 内部存在一个变量(经验法则:从上一个{
开始,在匹配的}
结束),这对于函数尤其有意义,因为函数中的变量仅在函数执行后才存在。
function addNumbers(x,y) { // sum can be used from here on
var sum = x + y; // always declare variables where you ise them first, otherwide you get funny behaviour
return sum; // <-
} // you cannot use sum from here on
现在,这意味着您无法访问sum
之外的addNumbers
。但是,当函数return
的值为sum
时,您可以将其存储在另一个变量中:
var cool = addNumbers(1, 2);
现在,您可以使用该cool
变量并最终对其进行记录。