Home > OS >  javascript: Callback function code considered as string
javascript: Callback function code considered as string

Time:09-18

Am a newbie in javascript, please help me understand below case where the callback function code is being considered as a string and passed as argument instead of passing the value of the callback function as an argument:

//Case3: Create Callback function in the argument section of calling statement.

function child3(callback,arg2=3) {
     return console.log("Case3: callback function - parent function out:", callback arg2,"\n");
}

child3(parent3=()=>{
   let a=1;
   let b=1;
   return a b;
},2);

Output:

Case3: callback function - parent function out: ()=>{
   let a=1;
   let b=1;
   return a b;
}2

CodePudding user response:

When you use , there are two possibilities:

  • If both operands are numbers or BigInts, they are added together
  • Otherwise, both operands are concatenated together into a string

If you do

callback arg2

and callback isn't a number, the result will be a concatenation of it and arg2. In your code, callback is not a number; it's a function. You probably wanted to call the callback instead of concatenating it - eg, callback().

Another issue is that

child3(parent3=()=>{

should almost certainly be

child3(()=>{

unless you deliberately wanted to both create a new global function named parent3 and pass that to child3.

function child3(callback, arg2 = 3) {
  console.log(callback()   arg2);
}

child3(() => {
  let a = 1;
  let b = 1;
  return a   b;
}, 2);

CodePudding user response:

It's not a string, but a parameter. It has a name in the function's parameter list, which is callback, so, inside the function it is referred to as callback and when you pass

"Case3: callback function - parent function out:", callback arg2,"\n"

to console.log, you convert the function to string. By the way, you can do that without passing the function as parameter as well

function foo(a, b) {
    return a   b;
}

console.log(foo);

So, you do not pass it as a string, you pass it as a function instead, but it is converted into a string, i.e. the function definition when you call console.log.

  • Related