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: 
The easiest way to do that is with the `new` operator:

```js
function f() {
  alert('hello');
}

new f;
```

While that's unorthodox and unnatural, it works and is perfectly legal.

The `new` operator doesn't require parentheses if no parameters are used.
In ES6, you have what's called **Tagged Template Literals**.

For example:

```js
function foo(val) {
    console.log(val);
}

foo`Tagged Template Literals`;
```