어떻게 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
사용할 수있는 호출 및 적용 방법이 있습니까?.
답변
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
유효한 자바 스크립트 함수 객체,해야합니다 apply
기본적으로 기능.
답변
JavaScript ES6에서는 Spread 연산자를 사용하십시오 .
var list = ["12","23","100","34","56","9","233"];
console.log(Math.max(...list));
// ^^^ Spread operator
답변
누구든지 아래 코드가 어떻게 작동하는지 말해 줄 수 있습니까?
Math.max.apply(Math,list)
함수 구현 (본문)에서 참조 로 사용하고 인수로 전달할 객체 Math.max
와 함께 함수를 호출합니다 .Math
this
list
그래서 이것은 결국
Math.max("12","23","100","34","56", "9","233")
null 또는 Math를 전달하면 작동하는 것 같습니다.
분명히 Math.max
구현은 인스턴스 변수를 사용하지 않습니다. 그렇게 할 이유가 없습니다. 기본 구현은 반복 arguments
하여 최대 값을 찾습니다.
모든 사용자 정의 / 네이티브 함수에는 우리가 사용할 수있는 호출 및 적용 메소드가 있습니까?.
예, 모든 단일 기능은 call
또는 사용하여 호출 할 수 있습니다.apply
참조 :
- MDN
.apply()
문서 ( @RGraham에 대한 크레딧 )
답변
나는 말함으로써 시작 Math.max(...numbers)
과 Function.prototype.apply()
상대적으로 몇 가지 요소와 배열을 사용해야합니다. (…) 배열이 너무 크면 적용이 실패하거나 잘못된 결과를 반환합니다.
Math.max.apply(null | undefined | Math, numbers)
과 동일 Math.max(...numbers)
내가 추천 할 것입니다 때문에 Math.max(...numbers)
심미적 인 이유.
const numbers = [5, 6, 2, 3, 7];
const max = Math.max(...numbers);
console.log('max:', max);
// expected output: 7
const min = Math.min(...numbers);
console.log('min:', min);
// expected output: 2
매우 큰 숫자 형 배열에서 최대 요소를 찾아야하는 경우 Array.reduce()
메서드를 사용하십시오 .
Array.reduce()
각 값을 비교하여 숫자 형 배열에서 최대 요소를 찾는 데 사용할 수 있습니다.
const numbers = [5, 6, 2, 3, 7];
const getMax = (numbers) => numbers.reduce((a, b) => Math.max(a, b));
const getMin = (numbers) => numbers.reduce((a, b) => Math.min(a, b));
const max = getMax(numbers)
const min = getMin(numbers)
console.log('max:', max)
console.log('min:', min)
결론:
상대적으로 작은 Math.max(...numbers)
숫자 배열 : 매우 큰 숫자 배열 사용 : Array.reduce()
방법 사용
답변
Math.max (val1, val2, …)
Math.max(1, 2, 3); // Math.max([value1[, value2[, ...]]])
value1, value2...
매개 변수이며 숫자 MDN Math.max 여야합니다.
당신은 전달할 수 없습니다 array
로 Math.max
매개 변수를 설정합니다. 배열을 전달하려면 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
.
a pply = a rray
c all = c omma Sepa
전화 및 지원에 대한 추가 정보