Pass by Value and Pass by Reference in Javascript

TypescriptAngular

Typescript Problem Overview


Now that I've been working on Angular2 for almost 3 months, I've encountered a few scenarios which led me to wonder how does this happen ?

In the case of special this keyword it's obvious that it's passing a reference or instance of the related DOM Object or Class for Example.

But then there is another thing called ControlGroup which also does the same whenever it's assigned to another variable. And both the variables have access to same instance of that ControlGroup.

Typescript Solutions


Solution 1 - Typescript

Objects and arrays are passed by reference. Primitive values like number, string, boolean are passed by value. A reference to an object is also a primitive type and passed by value like other primitive types, but the object it refers to is still passed by reference.

This is not Angular or TypeScript specific, just how JavaScript works.

Solution 2 - Typescript

A tweak in case you know what are you doing, could be as follows:

pseudocode:

foo() {
  int num = 1;
  bar(num);
  // num is 2!!
}
bar(int arg byRef) {
  arg = 2
}

typescript:

function foo() {
  let num = 1;
  (() => {
    const ret = bar(num) as any;
    num = ret.arg;
  })();
  // num is 2!!
}
function bar(arg) {
  arg = 2;
  return { arg };
}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionanonView Question on Stackoverflow
Solution 1 - TypescriptGünter ZöchbauerView Answer on Stackoverflow
Solution 2 - TypescriptGuillermoView Answer on Stackoverflow