>  기사  >  웹 프론트엔드  >  Function.apply()에 대한 간략한 토론 2부------Apply의 매개변수 배열을 사용하여 JavaScript 프로그램 성능 향상_javascript 기술

Function.apply()에 대한 간략한 토론 2부------Apply의 매개변수 배열을 사용하여 JavaScript 프로그램 성능 향상_javascript 기술

WBOY
WBOY원래의
2016-05-16 19:23:37995검색

프로그램 성능을 향상시키는 Function.apply()의 기술에 대해 이야기해 보겠습니다.

Math.max() 함수부터 시작하겠습니다. Math.max 뒤에는 여러 매개변수가 올 수 있으며 마지막으로 모든 매개변수 중 최대값을 반환합니다.

예를 들어
alert(Math.max(5,8)) //8
alert(Math.max(5,7,9,3,1,6)) //9

그러나 많은 경우 배열에서 가장 큰 요소를 찾아야 합니다.
var arr=[5,7,9,1]
alert(Math.max(arr)) // 이는 불가능합니다. 꼭 이렇게 써주세요

function getMax(arr){
var arrLen=arr.length;
for(var i=0,ret=arr[0];i ret =Math.max(ret,arr[i]);                                                                                               ~               . Apply를 사용하는 경우 코드를 살펴보세요.
function getMax2(arr){
return Math.max.apply(null, arr)
}
두 코드 조각은 동일한 목적을 달성합니다. 그러나 getMax2 우아하고 효율적이며 훨씬 간단합니다.



성능 테스트 보기:
getMax 성능 테스트


<script></font>var myArr=new Array()</p> <p> <font face="Verdana"><br>function fillRnd(arrLen){ //1부터 10까지의 arrLen 난수를 배열에 채웁니다</font> for(var i=0,arr=[];i<arrLen;i ){</P> arr[i]=Math.ceil(Math.random()*10)<P> }<FONT face=Verdana> arr 반환<BR>}<BR><BR> <BR><BR>function getMax(arr){</FONT> var arrLen=arr.length;</P> for(var i=0,ret=arr[0];i<arrLen;i ){<P> ret =Math.max(ret,arr[i]);                                                            <FONT face=Verdana><BR>function getMax2(arr){<BR> return Math.max.apply(null,arr)<BR>}<BR><BR><BR> </FONT></P>myArr=fillRnd(20*10000) //200,000개의 난수를 생성하여 배열을 채웁니다<P> <FONT face=Verdana>var t1=new Date()<BR>var max1=getMax(myArr)<BR>var t2=new Date()</FONT>var max2=getMax2(myArr)</P>var t3=new Date() <FONT face=Verdana> <P>if (max1!==max2) Alert("error")<BR>alert([t3-t2,t2-t1]) //96,464 내 컴퓨터에서는 다른 결과가 나타날 수 있습니다</P> <P></script>


200,000개의 데이터를 비교하면 getMax2 시간은 96ms, getmax 시간은 464입니다. 둘의 차이는 5배

또 다른 예는 배열의 푸시 방법입니다.
var arr1=[1,3,4];

var arr2=[3,4,5];

arr2를 확장하려면 arr1에 하나씩 추가하고 마지막으로 arr1을 =[1,3,4,3,4,5]

arr1.push(arr2) 분명히 작동하지 않습니다. 이렇게 하면 [1,3,4, [3,4,5] ]

를 얻게 됩니다.
루프를 사용하여 하나씩 푸시할 수만 있습니다(물론 arr1.concat(arr2)를 사용할 수도 있지만 concat 메서드는 arr1 자체를 변경하지 않습니다)

var arrLen=arr2.length

for (var i =0;i arr1.push(arr2[i])
}

Apply가 있어서 일이 너무 단순해졌습니다

Array.prototype.push.apply(arr1,arr2)



성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.