Question: I was told today that it's possible to invoke a function without parentheses. The only ways I could think of was using functions like [`apply`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply) or [`call`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call).

```
f.apply(this);
f.call(this);

```

But these require parentheses on `apply` and `call` leaving us at square one. I also considered the idea of passing the function to some sort of event handler such as [`setTimeout`](https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout):

```
setTimeout(f, 500);

```

But then the question becomes "how do you invoke `setTimeout` without parentheses?"

So what's the solution to this riddle? How can you invoke a function in Javascript without using parentheses?

Answer: 
You can use getters and setters.

```
var h = {
  get ello () {
    alert("World");
  }
}

```

Run this script just with:

```
h.ello  // Fires up alert "world"

```

**Edit:**

We can even do arguments!

```
var h = {
  set ello (what) {
    alert("Hello " + what);
  }
}

h.ello = "world" // Fires up alert "Hello world"

```

**Edit 2:**

You can also define global functions that can be run without parenthesis:

```
window.__defineGetter__("hello", function() { alert("world"); });
hello;  // Fires up alert "world"

```

And with arguments:

```
window.__defineSetter__("hello", function(what) { alert("Hello " + what); });
hello = "world";  // Fires up alert "Hello world"

```

**Disclaimer:**

As @MonkeyZeus stated: Never ever shall you use this piece of code in production, no matter how good your intentions.
Here's an [example](https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onload) for a particular situation:

```
window.onload = funcRef;

```

Although that statement is not actually **invoking** but will lead to a **future invocation**.

But, I figure grey-areas might be ok for riddles like this :)