JavaScript 언어 정수 함수 편 (3)
var request = prepare_request(); //
var response = send_request_sync(request); //
display(response); //
상기 예 는 동기 화 된 것 입 니 다. 만약 에 서버 의 응답 이 너무 느 리 면 클 라 이언 트 가 가짜 로 죽 는 현상 이 나타 날 수 있 습 니 다. 따라서 우 리 는 비동기 적 인 방식 으로 클 라 이언 트 와 서버 의 상호작용 을 완성 해 야 합 니 다.
var request = prepare_request(); //
send_request_asyc(request, function (response) {
display(response);
});
// send_request_asyc,
2. 모듈 모듈 모듈 은 인 터 페 이 스 를 제공 하지만 상태 와 함 수 를 실현 하 는 함수 나 대상 을 숨 깁 니 다. 우 리 는 함수 와 패 킷 으로 모듈 모듈 모듈 을 구성 할 수 있 습 니 다. 전역 변수의 역할 을 완전히 지양 할 수 있 습 니 다. 다음은 실체 문 자 를 html 로 표시 하 는 예 를 살 펴 보 겠 습 니 다.
Function.prototype.method = function (name, fun) {
// ,
if(!this.prototype[name]) {
this.prototype[name] = fun;
return this;
}
}
String.method("deentityify", function () {
//
var entity = {
quot : '"',
lt : "<",
gt : ">"
}
// entity
return function () {
// & , ; , & ;
// this
return this.replace(/&([^&;]+);/g, function (a, b) {
var r = entity[b];
// alert(a); // < " > &ddd;
// alert(alert(b));// lt undefined quot undefined gt undefined ddd
return typeof r === "string" ? r : a;
});
}
}());
document.writeln("<">&ddd;".deentityify()); // <">&ddd;
모듈 의 일반적인 형식: 개인 변수 나 함 수 를 정의 하 는 함수 입 니 다. 패 킷 을 닫 아서 개인 변수 나 함수 에 접근 할 수 있 는 특권 방법 을 만 들 고 마지막 으로 이 특권 방법 을 되 돌려 주거 나 접근 할 수 있 는 곳 에 저장 합 니 다.다음 에 우 리 는 서열 화 를 생 성 할 수 있 는 모듈 을 구축 해 야 한다.
var serial_maker = function () {
// ,
var prex = '';
var seq = 0;
//
return {
setPrex : function (p) {
prex = String(p);
},
setSeq : function (s) {
seq = Number(s);
},
gensyn : function () {
var result = prex + seq;
seq++;
return result;
}
};
};
var maker = serial_maker();
maker.setPrex("U");
maker.setSeq(200);
alert(maker.gensyn()); // U200
maker.setPrex("Q");
alert(maker.gensyn()); // Q200
3. 등급 연결 방법, 예 를 들 어 수정 과 설정, 반환 값 이 없습니다. 기본 값 은 undefined 입 니 다. 우 리 는 그들 로 하여 금 this 로 돌아 가게 할 수 있 습 니 다. 그러면 이 방법 은 등급 연결 을 열 수 있 습 니 다. 즉, 같은 대상 의 많은 방법 을 순서대로 호출 할 수 있 습 니 다.
getElement("div").move(200, 200).setBackground("#ccc").....; // div
4. 세트 는 함수 와 전달 하 는 매개 변 수 를 결합 하여 새로운 함 수 를 만 들 수 있 도록 합 니 다.
var add = function (a, b) {
return a + b;
}
Function.method("curry", function () {
var slice = Array.prototype.slice;
// , 10
var args = slice.apply(arguments);
alert(args); // 10
var that = this;
alert(this); // curry , a add()
return function () {
alert(this); // [object Window]
return that.apply(null, args.concat(slice.apply(arguments)));
}
});
var add1 = add.curry(10);
alert(add1(100)); // 110
5. 기억 함 수 는 대상 으로 하여 금 이전에 조작 한 결 과 를 기억 하 게 할 수 있다. 그러면 불필요 한 계산 을 피 할 수 있다. 다음은 예 를 들 어 보 자.
var fibonacci = function (n) {
return n < 2 ? n : arguments.callee(n - 1) + arguments.callee(n - 2);
}
var start = Date.now();
for(var i = 0; i <= 30; i++) {
if (i == 30) {
document.writeln("// " + i + " : " + fibonacci(i) + "<br/>");
}
}
var end = Date.now();
document.writeln(" : " + (end - start) + "<br/>"); // 1360
통계 에 따 르 면 fibonacci 함 수 는 453 번 호출 되 었 고 우 리 는 11 번 호출 되 었 으 며, 자신 은 442 번 자신 을 호출 하여 이전에 계산 한 값 을 계산 하 였 기 때문에 우 리 는 기억 하 는 방식 으로 프로그램 을 최적화 시 킬 수 있다.
var fibonacciMemory = function () {
var meo = [0, 1];
var fib = function (n) {
var result = meo[n];
if(typeof result !== 'number') {
result = arguments.callee(n - 1) + arguments.callee(n - 2);
meo[n] = result;
}
return result;
}
return fib;
}();
var start = Date.now();
for(var i = 0; i <= 400; i++) {
if (i == 400) {
document.writeln("// " + i + " : " + fibonacciMemory(i) + "<br/>");
}
}
var end = Date.now();
document.writeln(" : " + (end - start));
물론 우 리 는 기억 이라는 형식 을 일반화 할 수 있다.
var memoizer = function (memo, fundamental) {
var shell = function (n) {
var result = memo[n];
if (typeof result !== 'number') {
result = fundamental(shell, n);
memo[n] = result;
}
return result;
}
return shell;
};
var fibonacci = memoizer([0, 1], function (shell, n) {
return shell(n - 1) + shell(n - 2);
});
alert(fibonacci(10)); // 55
alert(fibonacci(100)); // 354224848179262000000
var factorial = memoizer([1, 1], function (shell, n) {
return shell(n - 1) * n;
});
alert(factorial(5)); // 120
alert(factorial(50)); // 3.0414093201713376e+64
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
java성 시급 연결 메뉴 실례 코드본고의 실례는 모두에게 자바성 시급련의 구체적인 코드를 공유하여 참고하도록 하였으며, 구체적인 내용은 다음과 같다. 1.LoadAreaServlet.java 2.test1.html 이상은 본고의 전체 내용입니다. 여...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.