具有和不具有参数的Javscript函数

时间:2018-07-08 00:36:31

标签: javascript

JavaScript初学者在这里。我试图理解以下两个示例之间的区别以及它们为什么呈现不同的结果。任何帮助将非常感激!谢谢!

示例1

var age = 30;

function changeAge(a) {
    a = 20;
}

changeAge(age);
console.log(age); // ------ output = 30

示例2

var age = 30;

function changeAge() {
    age = 20;
}

changeAge();
console.log(age); // ------ output = 20

2 个答案:

答案 0 :(得分:1)

两个示例的不同之处在于:

  • 在第一个示例中,您更新a,它是函数执行结束时丢失的局部变量。

  • 在第二个示例中,您更新age,这是一个全局变量,所有人都可以访问。

这些示例的精髓在于说明,在JavaScript中,您只能按值传递变量,而不能像其他语言那样通过引用传递变量。


要使第一个示例在功能上与第二个示例相同,您需要返回a并将函数结果分配给age

var age = 30;

function changeAge(a) {
  a = 20;
  return a; // or simply return 20;
}

age = changeAge(age);
console.log(age); // ------ output = 20

答案 1 :(得分:0)

第一种情况下'age'的值未更改,因为您已更改了参数的局部变量'a'的值。

在第二种情况下,更改了“年龄”的值,因为它是函数中可用的全局值。

场景中出现了两个概念,请研究它们