将变量值重新分配为参数

时间:2019-11-04 16:18:37

标签: angular

我想重新分配通过多个函数传递的变量

public name: string;
public secondName: string;
public thirdName: string;

functionA(name: string) {
   this.functionB(name);
}

functionB(name: string) {
   name = "Hello World";
}

当我像这样在functionA()中调用变量时,我希望将变量重新分配给“ Hello World”

functionA(this.name);
console.log(this.name);

这是怎么了? Console.log输出未定义。我知道functionB()中的“名称”不直接引用this.name,这就是要点,我想找到一种“名称”引用this.name的方法。

3 个答案:

答案 0 :(得分:3)

字符串是通过值而不是通过引用传递的。当您将this.name传递给functionB且functionB对其进行更改时,functionB仅更改参数的值。

要确保其更改this.name,您可以执行以下操作:

public name: string;

functionA() {
   this.functionB("hello world");
}

functionB(nameToSet: string) {
   this.name = nameToSet;
   console.log(nameToSet, this.name);
}

文章:https://medium.com/nodesimplified/javascript-pass-by-value-and-pass-by-reference-in-javascript-fcf10305aa9c

答案 1 :(得分:1)

您应该使用this.name而不是name。 您的代码将如下所示:

  public name: string;


  functionA() {
      this.functionB(this.name);
   }

   functionB(name: string) {
      this.name = "Hello World";
      console.log('name', this.name);
   }

查看there进行实时演示

答案 2 :(得分:1)

您正在尝试获取this.name的值。在类或组件中,您刚刚声明了属性“ public name:string;”。但没有设置。因此该属性似乎是“未定义的” =>,在您的示例中是正确的。

本地函数变量 name 当然设置为字符串“ Hello World”,可以使用。

如果要设置this.name,则需要在functionB中进行设置,例如:

functionB(name: string) {
   this.name = name;
   console.log(name, this.name);
}