C# / VB.NET have the concept of a **delegate instance** which enables [first-class functions](https://en.wikipedia.org/wiki/First-class_function):

    Action action = Console.WriteLine;
    //same as the following:
    //Action action = (Action)Delegate.CreateDelegate(typeof(Action), typeof(Console), "WriteLine");

This is not the method itself, but rather an object pointing to the method (this object can be invoked as if it were the function). Thus, there can be multiple objects that point to the same method + target:

    Action action2 = Console.WriteLine;
    Object.ReferenceEquals(action, action2); //False

(although comparing the two objects with `==` will return `True`.)

Javascript does not require delegates, because a function is itself an object which can be passed around. Therefore any two references to the function will refer to the same object:

    var fn = console.log;
    var fn2 = console.log;
    console.log(fn === fn2); //true

What differences in capability arise from these two mechanisms -- "pointer-to-function as object" vs "function as object"?