Calling a function without parentheses returns whole function as a string

前端 未结 6 1124
一生所求
一生所求 2021-01-19 01:10

I created a JavaScript object like this:

var obj = {
  a: 10,
  b: 20,
  add: function(){
     return this.a + this.b;
  }
};

I executed the

相关标签:
6条回答
  • 2021-01-19 01:42

    It's quite simple: functionName just returns the function body, while functionName() executes the function and returns its return value (or undefined, if there's no explicit return). The same principle works for when a function is an object property, like you had obj.add.

    0 讨论(0)
  • 2021-01-19 01:52

    You didn't execute the function with obj.add, you only looked it up in the object and the environment you're in happened to render the function as a string. You execute it by adding the parentheses.

    0 讨论(0)
  • 2021-01-19 01:54

    Without parentheses, you're retrieving a reference to the function, you are not calling (executing) the function

    With parentheses, you're executing the function.

    function a() {
      return 2;
    }
    
    var b = a(); // called a, b is now 2;
    var c = a; // c is referencing the same function as a
    console.log(c); // console will display the text of the function in some browsers
    var d = c(); // But it is indeed a function, you can call c(), d is now 2;

    0 讨论(0)
  • 2021-01-19 01:54

    Without the parenthesis you're not really calling anything, nor are you returning anything, it's just a reference !

    I'm guessing you did something like this

    var result = ambes.add;
    
    console.log(result);
    

    and that doesn't call the function, it logs the actual content of the add property, which is the function, and logging a function will log the string content of the function, not what it would return had you called it.

    0 讨论(0)
  • 2021-01-19 01:58

    You must use () to call a function in JavaScript.

    If you do not use parenthesis, you are simply referencing the function, which can be useful in a case where you would like to pass a function to another code block for deferred execution.

    In your situation, because you wish to call add right away, you should be sure to use ()

    obj.add();
    
    0 讨论(0)
  • 2021-01-19 02:02

    Calling a function requires the () because they are the function invocation operator. To execute a function you will always need to include parentheses.

    When you call ambes.add you are returning the function object itself. If you do so inside console.log() or concatenate it onto a string JavaScript will return the function definition as a complete string which explains the first output you receive.

    0 讨论(0)
提交回复
热议问题