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: 
In ES6, you have what's called **Tagged Template Literals**.

For example:

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

foo`Tagged Template Literals`;
```
```
Array.constructor`alert\x28"invoke with whatever u want"\x29```;

```

Because Array.constructor is a `Function` object. When Function objects are invoked, they return a function which it's body is the arguments it got.