[함수 표현식] 패키지 닫기
익명 함수 - function 키워드 뒤에 식별자가 없는 함수입니다.패키지 닫기 - 다른 함수 작용 영역의 변수에 접근할 수 있는 함수입니다.
// : 。
function createComparisonFunction(propertyName){
return function (object1,object2) {
var value1 = object1[propertyName];
var value2 = object2[propertyName];
if(value1value2){
return 1;
}else{
return 0;
}
}
}
일반적으로 함수가 실행되면 로컬 활성 객체가 제거되고 메모리에는 글로벌 역할(전역 실행 환경의 변수 객체)만 저장됩니다.하지만 폐쇄 상황은 다르다.
var compare = createComparisonFunction("name");
var result = compare({name:"Wonder"},{name:"Greg"});
위 코드가 실행될 때, 익명 함수가createComparisonFunction () 에서 되돌아온 후, 그 역할 필드 체인은createComparisonFunction () 함수를 포함하는 활성 대상과 전역 변수 대상으로 초기화됩니다.이렇게 하면 익명 함수는createComparisonFunction()에 정의된 모든 변수에 접근할 수 있습니다.더 중요한 것은createComparisonFunction () 함수는 실행이 끝난 후에도 활동 대상이 삭제되지 않습니다. 익명 함수의 역할 체인이 여전히 이 활동 대상을 인용하고 있기 때문입니다.즉createComparisonFunction() 함수가 되돌아오면 실행 환경의 역할 체인은 삭제되지만 활성 대상은 메모리에 남아 있습니다.익명 함수가 삭제될 때까지createComparisonFunction () 의 활동팀은 삭제될 것입니다.
//
var compare = createComparisonFunction("name");
//
var result = compare({name:"Wonder"},{name:"Greg"});
// (
compare = null;
패키지는 함수를 포함하는 작용역을 가지고 있기 때문에 다른 함수보다 더 많은 메모리를 차지합니다.패킷을 과도하게 사용하면 메모리가 너무 많이 차지할 수 있습니다.
패키지 닫기 및 변수
패키지를 닫으면 함수에 포함된 변수의 마지막 값만 얻을 수 있습니다.function createFunctions() {
var result = new Array();
for (var i = 0; i < 10; i++) {
result[i] = function () {
return i;
};
}
return result;
}
var re = createFunctions();
alert(re[0]()); //10
이 함수는 함수 그룹을 되돌려줍니다.표면적으로는 모든 함수가 자신의 색인 값을 되돌려야 하는 것 같지만, 실제로는 모든 함수가 10을 되돌려준다.모든 함수의 역할 체인에createFunctions () 함수의 활동 대상이 저장되어 있기 때문에 같은 변수 i를 참조합니다.createFunctions () 함수가 되돌아오면 변수 i의 값은 10입니다. 이 함수마다 저장된 변수 i의 같은 변수 대상을 인용하기 때문에 함수 내부 i의 값은 10입니다.
해결 방법: 다른 익명 함수를 만들어서 패키지를 닫는 행위가 예상에 부합하도록 합니다.function createFunctions() {
var result = new Array();
for (var i = 0; i < 10; i++) {
result[i] = function (num) {
return function () {
return num;
};
}(i);
}
return result;
}
var re = createFunctions();
alert(re[0]());
this 객체 정보
익명 함수의 실행 부분은 전역성을 가지기 때문에this 대상은 보통 윈도우를 가리킨다.var name = "window";
var object = {
name:"object",
getNameFunc: function () {
return function () {
return this.name;
}
}
}
alert(object.getNameFunc()()); //( )window
모든 함수는 호출될 때 두 개의 특수 변수를 자동으로 얻습니다:this와arguments.내부 함수는 이 두 변수를 검색할 때 활성 대상까지만 검색되기 때문에 외부 함수의 이 두 변수에 직접 접근할 수 없습니다.해결 방안: 외부 역할 영역의this 대상을 클러치가 접근할 수 있는 변수에 저장하면 클러치가 이 대상에 접근할 수 있습니다.var name = "window";
var object = {
name:"object",
getNameFunc: function () {
var that = this;
return function () {
return that.name;
}
}
}
alert(object.getNameFunc()()); //object
메모리 유출
IE9 이전 버전은 JScript 대상과COM 대상에 대해 서로 다른 쓰레기 회수 절차를 사용했기 때문에 IE의 이 버전에 패키지를 닫으면 특수한 문제가 발생할 수 있습니다.
닫힌 역할 도메인 체인에 HTML 요소가 저장되어 있으면 해당 요소가 제거되지 않습니다.function assignHandler(){
var element = document.getElementById("someElement");
element.onclick = function(){
alert(element.id);
}
}
솔루션:function assignHandler(){
var element = document.getElementById("someElement");
var id = element.id;
element.onclick = function(){
alert(id);
}
element = null;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
function createFunctions() {
var result = new Array();
for (var i = 0; i < 10; i++) {
result[i] = function () {
return i;
};
}
return result;
}
var re = createFunctions();
alert(re[0]()); //10
function createFunctions() {
var result = new Array();
for (var i = 0; i < 10; i++) {
result[i] = function (num) {
return function () {
return num;
};
}(i);
}
return result;
}
var re = createFunctions();
alert(re[0]());
익명 함수의 실행 부분은 전역성을 가지기 때문에this 대상은 보통 윈도우를 가리킨다.
var name = "window";
var object = {
name:"object",
getNameFunc: function () {
return function () {
return this.name;
}
}
}
alert(object.getNameFunc()()); //( )window
모든 함수는 호출될 때 두 개의 특수 변수를 자동으로 얻습니다:this와arguments.내부 함수는 이 두 변수를 검색할 때 활성 대상까지만 검색되기 때문에 외부 함수의 이 두 변수에 직접 접근할 수 없습니다.해결 방안: 외부 역할 영역의this 대상을 클러치가 접근할 수 있는 변수에 저장하면 클러치가 이 대상에 접근할 수 있습니다.
var name = "window";
var object = {
name:"object",
getNameFunc: function () {
var that = this;
return function () {
return that.name;
}
}
}
alert(object.getNameFunc()()); //object
메모리 유출
IE9 이전 버전은 JScript 대상과COM 대상에 대해 서로 다른 쓰레기 회수 절차를 사용했기 때문에 IE의 이 버전에 패키지를 닫으면 특수한 문제가 발생할 수 있습니다.
닫힌 역할 도메인 체인에 HTML 요소가 저장되어 있으면 해당 요소가 제거되지 않습니다.function assignHandler(){
var element = document.getElementById("someElement");
element.onclick = function(){
alert(element.id);
}
}
솔루션:function assignHandler(){
var element = document.getElementById("someElement");
var id = element.id;
element.onclick = function(){
alert(id);
}
element = null;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
function assignHandler(){
var element = document.getElementById("someElement");
element.onclick = function(){
alert(element.id);
}
}
function assignHandler(){
var element = document.getElementById("someElement");
var id = element.id;
element.onclick = function(){
alert(id);
}
element = null;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.