我在函数中定义变量时出错

时间:2019-02-27 16:47:14

标签: javascript

function addNumbers(x,y) {
    sum = x + y;
    var sum;
    return sum;
}

addNumbers(5,9);
alert(sum);

它说:未捕获的ReferenceError:未定义总和

当我在函数前加上“ var sum”时,它起作用。是什么原因?

2 个答案:

答案 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),但这是更好的形式。 (与letconst无关,您应该使用它们代替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变量并最终对其进行记录。