Как работает математика.максимум.применить () работу?


как 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

приведенный выше код находит максимальное число в списке. Может ли кто-нибудь сказать мне, как работает приведенный ниже код?. Кажется, это работает, если я прохожу null or Math.

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

не все user-defined/Native functions есть вызов и применить способ, который мы можем использовать?.

4 58

4 ответа:

apply принимает массив и применяет его в качестве параметров к фактической функции. Итак,

Math.max.apply(Math, list);

можно понимать так:

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

и apply - это удобный способ передачи массива данных в качестве параметров функции. Помните

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

не получится, потому что max не принимает массив в качестве входных данных.

есть еще одно преимущество, с помощью apply, вы можете выбрать свой собственный контекст. Первый параметр, вы перейти к apply любой функции, будет this внутри этой функции. Но,max не зависит от текущего контекста. Так что, все будет работать на месте 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

С apply фактически определена в Function.prototype, любой допустимый объект функции JavaScript, будет иметь apply функция, по умолчанию.

на JavaScript ES6 просто используйте распространение оператор:

var list = ["12","23","100","34","56","9","233"];
console.log(Math.max(...list));
//                   ^^^ Spread operator 

может ли кто-нибудь сказать мне, как работает приведенный ниже код?

Math.max.apply(Math,list)

вызывает a

математика.Макс(val1, val2,...)

Math.max(1, 2, 3); // Math.max([value1[, value2[, ...]]])
value1, value2... параметры и должны быть цифры MDN Math.Макс

вы не можете пройти array как Math.max параметры. Чтобы передать массив, вы должны использовать apply.

применить

первый параметр apply -this, второй -array. Математические методы эквивалентны статическим на других языках, что означает, что ему не нужен экземпляр объекта в отличие от array.prototype.slice так вам не нужно проходить this в этом случае.

пример

var arr = [1, 2, 3];

Math.max(1, 2, 3);  // -> 3
Math.max(arr);      // -> NaN (Not a Number)
Math.max.apply(null, arr);  // Math.max.apply(null, [1, 2, 3]) -> Math.max(1, 2, 3) -> 3

arr.slice(1);  // -> returns Array [2, 3]
Array.prototype.slice.call(arr, 1); // Array.prototype.slice.call([1, 2, 3], 1) == [1, 2, 3].slice(1)

когда вы хотите передать массив в качестве параметра вы должны использовать apply, в противном случае используйте call.

apply = array
cвсе = cомма, разделенных
подробнее о вызове и применении