Shane - 6 months ago 68

Javascript Question

How does the

`Math.max.apply()`

`<!DOCTYPE html>`

<html>

<head>

<meta charset=utf-8 />

<title>JS Bin</title>

</head>

<body>

<script>

var list = ["12","23","100","34","56",

"9","233"];

console.log(Math.max.apply(Math,list));

</script>

</body>

</html>

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/max

The above code finds the Max number in the List. Can anyone tell me how does the below code work?. It seems it works if i pass

`null or Math.`

`console.log(Math.max.apply(Math,list));`

Does all the

`user-defined/Native functions`

Answer

`apply`

accepts an array and it applies the array as parameters to the actual function. So,

```
Math.max.apply(Math, list);
```

can be understood as,

```
Math.max("12", "23", "100", "34", "56", "9", "233");
```

So, `apply`

is a convenient way to pass an array of data as parameters to a function. Remember

```
console.log(Math.max(list)); # NaN
```

will not work, because `max`

doesn't accept an array as input.

There is another advantage, of using `apply`

, you can choose your own context. The first parameter, you pass to `apply`

of any function, will be the `this`

inside that function. But, `max`

doesn't depend on the current context. So, anything would work in-place of `Math`

.

```
console.log(Math.max.apply(undefined, list)); # 233
console.log(Math.max.apply(null, list)); # 233
console.log(Math.max.apply(Math, list)); # 233
```

Since `apply`

is actually defined in `Function.prototype`

, any valid JavaScript function object, will have `apply`

function, by default.