이번에는 기본 JavaScript 지식 요약을 가져왔습니다. 총 11개의 지식 포인트가 있습니다. 기본 JavaScript 지식 요약(10) 실제 사례를 살펴보겠습니다.
//例子function a() { function b(){ var bbb = 234; console.log(aaa) } var aaa = 123; return b; }var glob = 100;var demo = a(); demo();
우선 이 함수가 return b를 실행한 후 함수 a는 실행을 마치고 a의 AO는 소멸되지만 함수 b는 소멸되기 전에 저장되었기 때문에 b의 실행 컨텍스트는 소멸되지 않았습니다.
그래서 b의 AO와 Go가 저장됩니다
이렇게 클로저가 형성됩니다. 내부 함수가 외부에 저장되며, 클로저를 형성해야 합니다
function a (){ var num = 100; function b(){ num ++; console.log(num); } return b; }var demo = a(); demo();//打印101demo();//打印102
개념 클로저: 내부 함수가 외부에 저장되면 클로저가 생성됩니다. 닫으면 원래 스코프 체인이 해제되지 않아 메모리 누수가 발생합니다(메모리 점유)
메모리 누수: 예를 들어...컵...물을 많이 넣을수록 메모리가 줄어듭니다( 마찬가지로, 더 많은 메모리를 차지할수록 더 적은 메모리를 갖습니다)
클로저의 역할
공용 변수 구현
함수 누산기
캐시(저장 구조)로 사용할 수 있음
eater
캡슐화 가능 , 속성 사유화
Person()
모듈화전역 변수 오염 방지를 위한 개발
1 위의 누산기 예시를 작성했습니다
2. 캐싱(저장 구조)이 가능합니다
function test(){ var num = 100; function a(){ num ++; console.log(num); }; function b(){ num --; console.log(num); }; return [a,b] }var myArr = test(); myArr[0]();//打印101myArr[1]();//打印100 function eater(){ var food = ""; var obj ={ eat : function(){ console.log("i am eating" + food) }, push : function (myFood){ food = myFood; } } return obj; }var eater1 = eater(); eater1.push('banana'); eater1.eat();//打印出 i am eating banana
위와 같습니다. 예 I eater1.push('banana') 후에 eater의 foot = ""가 주어지며, 이는 food = "banana"가 됩니다. eater1.eat()를 실행한 후 food = "banana"를 얻었습니다. 모두 동일한 클로저에서 작동하므로 먹고 있는 바나나가 인쇄됩니다. 이 발은 암시적 저장 구조와 동일합니다.
직접 구덩이를 구입하세요. 속성은 사유화되어 있습니다. 객체 작성을 마친 후 설명하겠습니다. 모듈 개발도 마찬가지입니다.
함수를 즉시 실행하세요.
이런 유형의 함수는 한 번에 선언되지 않습니다. 실행 후 출시됩니다. 초기화 작업에 적합합니다.
function a(){ }function b(){ }
두 개의 함수를 정의합니다. 이 두 함수는 JavaScript가 실행될 때까지 기다리지 않는 한 이 두 함수는 결코 해제되지 않으며 항상 실행되기를 기다리는 데 공간을 차지합니다.
기능: 초기화 기능을 위한 함수
(function (aaa,bbb,ccc){ var a = 234; var b = 123; var c = a+b; console.log(c) return c}(1,2,3)) 执行完立即被销毁 // 怎么去接收他var num = (function (aaa,bbb,ccc){ var a = 234; var b = 123; var c = a+b; console.log(c) return c}(1,2,3)) 立即执行函数有两种写法 //第一种(function(){}());//w3c 建议第一种//第二种(function(){})(); 扩展 只有表达式才可以被执行符号执行 var test = function (){}()//也可以被执行+ function test(){}()//也可以被执行 以此类推- !号也可以function test(){ console.log(a+b+c+d)}(1,2,3,4)//不执行也不报错
이 기사의 사례를 읽으신 후 방법을 마스터하셨다고 생각합니다. 더 흥미로운 정보를 보려면 PHP 중국어 웹사이트의 다른 관련 기사를 주목하세요!
관련 읽기:
기본 JavaScript 지식 요약(9) 범위 및 범위 체인 개선
기본 JavaScript 지식 요약(8) 사전 컴파일 실행 프로세스
위 내용은 JavaScript 기본 지식 요약 (10) 클로저 및 즉시 실행 기능의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!