목차
변수 값 복사
패스 매개변수
실행 환경 및 범위
for 루프 문에서도 마찬가지입니다.
변수 쿼리에서는 전역 변수보다 지역 변수에 접근하는 속도가 빠르므로 범위 체인을 검색할 필요가 없습니다.
매우 간단한 예: DOM 객체는
클로저 외부의 변수가 클로저에 도입되면 클로저가 종료될 때 객체를 가비지 수집(GC)할 수 없습니다. " >클로저 외부의 변수가 클로저에 도입되면 클로저가 종료될 때 객체를 가비지 수집(GC)할 수 없습니다.
원본 COM이 제거되면 제거되지 않는 한 하위 노드 참조를 재활용할 수 없습니다.
타이머는 메모리 누수가 발생하는 일반적인 장소이기도 합니다.
调试内存
웹 프론트엔드 JS 튜토리얼 JavaScript 변수, 범위 및 메모리에 대한 자세한 설명

JavaScript 변수, 범위 및 메모리에 대한 자세한 설명

Mar 04, 2017 pm 04:02 PM
javascript

기본 유형 값은 undefined,NUll,Boolean,Number和String입니다. 이러한 유형은 메모리에서 고정된 크기 공간을 차지하며 해당 값은 스택 공간에 저장되며 값으로 액세스합니다.

(1) 값 유형: 숫자 값, 부울 값, null, 정의되지 않음.
(2) 참조 유형: 객체, 배열, 함수.

할당된 값이 참조 유형인 경우 힙 메모리에 이 값에 대한 공간을 할당해야 합니다. 이러한 값의 크기는 고정되어 있지 않기 때문에(객체에는 많은 속성과 메서드가 있음) 스택 메모리에 저장할 수 없습니다. 하지만 메모리 주소 크기는 고정되어 있으므로 메모리 주소를 스택 메모리에 저장할 수 있습니다.

<script type="text/javascript”>
var box = new Object();  //创建一个引用类型
var box = "trigkit4";   //基本类型值是字符串
box.age = 21;    //基本类型值添加属性很怪异,因为只有对象才可以添加属性。
alert(box.age);  //不是引用类型,无法输出;
</script>
로그인 후 복사

간단히 말하면 힙 메모리는 참조 값을 저장하고, 스택 메모리는 고정형 값을 저장합니다. "참조"는 개체의 실제 위치에 대한 포인터입니다.

여기서 참조는 다른 참조가 아닌 특정 개체를 가리킨다는 점에 유의해야 합니다.

여기의 개체는 문자열 개체, 숫자 개체, 배열 개체 등이 될 수 있습니다.

<script type="text/javascript">
    var man = new Object();//man指向了栈内存的空间地址
    man.name = "Jack";
    var man2 = man;//man2获得了man的指向地址

    alert(man2.name);//两个都弹出Jack
    alert(man.name);
</script>
로그인 후 복사

변수 값 복사

이것을 보세요 다시 예시:

<script type="text/javascript">
    var man = new Object();//man指向了栈内存的空间地址
    man.name = "Jack";
    var man2 = man;//man2获得了man的指向地址

    man2.name = "ming";//因为他们都指向同一个object,同一个name,不管修改谁,大家都修改了
    alert(man2.name);//两个都弹出ming
    alert(man.name);
</script>
로그인 후 복사

위에서 보면 변수 복사 측면에서도 기본형과 참조형은 다르다는 것을 알 수 있다. 기본형은 값 자체를 복사하는 반면, 참조형은 주소를 복사한다.

패스 매개변수

ECMAScript에서는 모든 함수의 매개변수가 값으로 전달됩니다.

<script type="text/javascript">
     function box(num){      //按值传递
         num+=10;
         return num;
     }

     var num = 10;
     var result = box(num);
     alert(result);  //如果是按引用传递,那么函数里的num会成为类似全局变量,把外面的number替换掉
     alert(num);    //也就是说,最后应该输出20(这里输出10)
</script>
로그인 후 복사

js는 참조 패스가 있는 경우에는 전달되지 않습니다. 그러면 함수 내의 변수는 전역 변수가 되며 외부에서도 액세스할 수 있습니다. 그러나 이것은 분명히 불가능하다.

실행 환경 및 범위

실행 환경은 javascript에서 가장 중요한 개념 중 하나입니다. 실행 환경은 변수나 함수가 다른 데이터에 접근할 수 있도록 정의합니다.

전역 실행 환경은 웹 브라우저에서 가장 주변적인 실행 환경입니다. 따라서 전역 변수 함수는 모두 window의 속성과 메서드로 생성됩니다. . window

<script type="text/javascript">
      var name = "Jack";           //定义全局变量
      function setName(){
          return "trigkit4";
      }

      alert(window.name);        //全局变量,最外围,属于window属性
      alert(window.setName());  //全局函数,最外围,属于window方法
</script>
로그인 후 복사

실행환경의 코드가 실행되면 환경은 소멸되며, 그 안에 저장된 변수와 함수도 소멸됩니다. 글로벌 환경이라면 모든 프로그램이 소멸될 때까지 소멸되지 않습니다. 실행되었거나 웹페이지가 완료되었습니다.

var의 지역 변수 제거

<script type="text/javascript">
      var name = "Jack";
      function setName(){
          name = "trigkit4";   //去掉var变成了全局变量
      }

      setName();
      alert(name);//弹出trigkit4
</script>
로그인 후 복사

매개변수를 전달하면 지역 변수이기도 합니다

<script type="text/javascript">
      var name = "Jack";
      function setName(name){    //通过传参,也是局部变量
          alert(name);
      }

      setName("trigkit4");//弹出trigkit4
      alert(name);//弹出Jack
</script>
로그인 후 복사

함수 본문에도 이 함수만 접근할 수 있습니다. 함수

<script type="text/javascript">
     var name = "Jack";
      function setName(){
          function setYear(){    //setYear()方法的作用域在setName()内
              return 21;
          }
      }
      alert(setYear());//无法访问,出错 
</script>
로그인 후 복사

의 내부 계층은 다음 방법을 통해 액세스할 수 있습니다.

<script type="text/javascript">
     var name = "Jack";
      function setName(){
          function setYear(){    //setYear()方法的作用域在setName()内
              return 21;
          }
          return setYear();
      }
      alert(setName()); //弹出21
</script>
로그인 후 복사

또 다른 범위 예:

<script type="text/javascript">
     var name = "Jack";
      function setName(){
          function setYear(){    //setYear()方法的作用域在setName()内
              var b = "hi";     //变量b的作用域在setYear()内
              return 21;
          }
          alert(b);//无法访问 
      }
</script>
로그인 후 복사

코드가 환경에서 실행될 때

, 그 목적은 실행 환경에서 접근 권한을 가진 변수와 함수에 대한 질서 있는 접근을 보장하는 것입니다(규칙 수준에 따른 접근을 의미합니다). 스코프 체인의 앞부분은 실행 환경의 변수 객체입니다. 作用域链

범위

변수가 함수 내에서 선언되지 않았거나 전역 변수이고 전역 범위를 갖는

없이 선언되었습니다. var객체의 모든 속성에는 전역이 있습니다. 범위; 함수 내에서 선언되고 window로 수정되는 변수는 지역 변수이며 함수 본문 내에서만 사용할 수 있습니다. 여전히 지역 변수입니다. varvar블록 수준 범위 없음

// if语句:

<script type="text/javascript">
if(true){                        //if语句的花括号没有作用域的功能。

var box = "trigkit4";
}
alert(box);//弹出 trigkit4
</script>
로그인 후 복사

for 루프 문에서도 마찬가지입니다.

변수 쿼리

변수 쿼리에서는 전역 변수보다 지역 변수에 접근하는 속도가 빠르므로 범위 체인을 검색할 필요가 없습니다.

다음 예:

<script type="text/javascript">
     var name = "Jack";
      function setName(){
           var name = "trigkit4";
           return name;  //从底层向上搜索变量
    }
    alert(setName());      
</script>
로그인 후 복사

각 환경은 범위 체인을 검색하여 변수 및 함수 이름을 쿼리할 수 있지만 어떤 환경도 범위 체인 실행 환경을 검색하여 다른 환경을 입력할 수 없습니다. 여기서

를 제거하면 "Jack"이 나타납니다.

var name = "trigkit4" 메모리 문제

에는 자동 가비지 수집 메커니즘이 있으므로 데이터가 더 이상 사용되지 않으면 참조를 해제하려면 " null"로 설정해야 합니다.

javascript 순환 참조

매우 간단한 예: DOM 객체는

객체에 의해 참조되며 동시에 동일한 또는 다른

개체, 이 Javascript 개체는 메모리 누수를 일으킬 수 있습니다. 이 Javascript 개체에 대한 참조는 스크립트가 중지되면 가비지 수집기에 의해 수집되지 않습니다. 순환 참조를 중단하려면 DOM 요소를 참조하는 개체 또는 DOM 개체에 대한 참조에 DOM 값을 할당해야 합니다. DOMnull

클로저
var a = function() {
  var largeStr = new Array(1000000).join(&#39;x&#39;);
  return function() {
    return largeStr;
  }
}();
로그인 후 복사

DOM 누수

원본 COM이 제거되면 제거되지 않는 한 하위 노드 참조를 재활용할 수 없습니다.

var select = document.querySelector;
var treeRef = select(&#39;#tree&#39;);

//在COM树中leafRef是treeFre的一个子结点
var leafRef = select(&#39;#leaf&#39;); 
var body = select(&#39;body&#39;);

body.removeChild(treeRef);

//#tree不能被回收入,因为treeRef还在
//解决方法:
treeRef = null;

//tree还不能被回收,因为叶子结果leafRef还在
leafRef = null;

//现在#tree可以被释放了。
로그인 후 복사

타이머 타이머 누수

타이머는 메모리 누수가 발생하는 일반적인 장소이기도 합니다.

for (var i = 0; i < 90000; i++) {
  var buggyObject = {
    callAgain: function() {
      var ref = this;
      var val = setTimeout(function() {
        ref.callAgain();
      }, 90000);
    }
  }

  buggyObject.callAgain();
  //虽然你想回收但是timer还在
  buggyObject = null;
}
로그인 후 복사

调试内存

Chrome自带的内存调试工具可以很方便地查看内存使用情况和内存泄露,在 Timeline -> Memory 点击record即可。

以上就是JavaScript 变量、作用域及内存详解的内容,更多相关内容请关注PHP中文网(www.php.cn)!

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

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

대용량 메모리 최적화, 컴퓨터가 16g/32g 메모리 속도로 업그레이드했는데 변화가 없다면 어떻게 해야 하나요? 대용량 메모리 최적화, 컴퓨터가 16g/32g 메모리 속도로 업그레이드했는데 변화가 없다면 어떻게 해야 하나요? Jun 18, 2024 pm 06:51 PM

기계식 하드 드라이브나 SATA 솔리드 스테이트 드라이브의 경우 소프트웨어 실행 속도의 증가를 느낄 수 있지만 NVME 하드 드라이브라면 느끼지 못할 수도 있습니다. 1. 레지스트리를 데스크탑으로 가져와 새 텍스트 문서를 생성하고, 다음 내용을 복사하여 붙여넣은 후 1.reg로 저장한 후 마우스 오른쪽 버튼을 클릭하여 병합하고 컴퓨터를 다시 시작합니다. WindowsRegistryEditorVersion5.00[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\MemoryManagement]"DisablePagingExecutive"=d

Xiaomi Mi 14Pro의 메모리 사용량을 확인하는 방법은 무엇입니까? Xiaomi Mi 14Pro의 메모리 사용량을 확인하는 방법은 무엇입니까? Mar 18, 2024 pm 02:19 PM

최근 샤오미는 스타일리시한 디자인은 물론 내부 및 외부 블랙 기술까지 갖춘 강력한 고급 스마트폰 샤오미 14Pro를 출시했다. 이 전화기는 최고의 성능과 뛰어난 멀티태스킹 기능을 갖추고 있어 사용자가 빠르고 원활한 휴대폰 경험을 즐길 수 있습니다. 하지만 성능은 메모리에 의해서도 영향을 받습니다. 많은 사용자들이 Xiaomi 14Pro의 메모리 사용량을 확인하는 방법을 알고 싶어하므로 한번 살펴보겠습니다. Xiaomi Mi 14Pro의 메모리 사용량을 확인하는 방법은 무엇입니까? Xiaomi 14Pro의 메모리 사용량을 확인하는 방법을 소개합니다. Xiaomi 14Pro 휴대폰의 [설정]에서 [애플리케이션 관리] 버튼을 엽니다. 설치된 모든 앱 목록을 보려면 목록을 탐색하고 보려는 앱을 찾은 다음 클릭하여 앱 세부 정보 페이지로 들어갑니다. 신청 세부정보 페이지에서

컴퓨터에서 8g 메모리와 16g 메모리 사이에 큰 차이가 있나요? (컴퓨터 메모리 8g 또는 16g 선택) 컴퓨터에서 8g 메모리와 16g 메모리 사이에 큰 차이가 있나요? (컴퓨터 메모리 8g 또는 16g 선택) Mar 13, 2024 pm 06:10 PM

초보 사용자가 컴퓨터를 구입할 때 8g과 16g 컴퓨터 메모리의 차이점이 궁금할 것입니다. 8g 또는 16g을 선택해야 합니까? 이 문제에 대해 오늘 편집자가 자세히 설명해 드리겠습니다. 컴퓨터 메모리 8g과 16g 사이에 큰 차이가 있나요? 1. 일반 가족이나 일반 업무의 경우 8G 런닝 메모리가 요구 사항을 충족할 수 있으므로 사용 중에는 8g와 16g 사이에 큰 차이가 없습니다. 2. 게임 매니아가 사용하는 경우 현재 대규모 게임은 기본적으로 6g부터 시작하며, 8g가 최소 기준입니다. 현재 화면이 2k인 경우 해상도가 높아진다고 프레임 속도 성능이 높아지는 것은 아니므로 8g와 16g 사이에는 큰 차이가 없습니다. 3. 오디오 및 비디오 편집 사용자의 경우 8g와 16g 사이에는 분명한 차이가 있습니다.

소식통에 따르면 삼성전자와 SK하이닉스는 2026년 이후 적층형 모바일 메모리를 상용화할 것으로 보인다. 소식통에 따르면 삼성전자와 SK하이닉스는 2026년 이후 적층형 모바일 메모리를 상용화할 것으로 보인다. Sep 03, 2024 pm 02:15 PM

3일 홈페이지 보도에 따르면 국내 언론 에트뉴스는 어제(현지시간) 삼성전자와 SK하이닉스의 'HBM형' 적층구조 모바일 메모리 제품이 2026년 이후 상용화될 것이라고 보도했다. 소식통에 따르면 두 한국 메모리 거대 기업은 적층형 모바일 메모리를 미래 수익의 중요한 원천으로 여기고 'HBM형 메모리'를 스마트폰, 태블릿, 노트북으로 확장해 엔드사이드 AI에 전력을 공급할 계획이라고 전했다. 이 사이트의 이전 보도에 따르면 삼성전자 제품은 LPWide I/O 메모리라고 하며 SK하이닉스는 이 기술을 VFO라고 부른다. 두 회사는 팬아웃 패키징과 수직 채널을 결합하는 것과 거의 동일한 기술 경로를 사용했습니다. 삼성전자 LPWide I/O 메모리의 비트폭은 512이다.

삼성전자가 HBM4 메모리에 널리 사용될 것으로 예상되는 16단 하이브리드 본딩 적층 공정 기술 검증을 완료했다고 밝혔다. 삼성전자가 HBM4 메모리에 널리 사용될 것으로 예상되는 16단 하이브리드 본딩 적층 공정 기술 검증을 완료했다고 밝혔다. Apr 07, 2024 pm 09:19 PM

보고서에 따르면 삼성전자 김대우 상무는 2024년 한국마이크로전자패키징학회 연차총회에서 삼성전자가 16단 하이브리드 본딩 HBM 메모리 기술 검증을 완료할 것이라고 밝혔다. 해당 기술은 기술검증을 통과한 것으로 알려졌다. 보고서는 이번 기술 검증이 향후 몇 년간 메모리 시장 발전의 초석을 마련하게 될 것이라고 밝혔다. 김대우 사장은 삼성전자가 하이브리드 본딩 기술을 바탕으로 16단 적층 HBM3 메모리를 성공적으로 제조했다고 밝혔다. ▲이미지 출처 디일렉, 아래와 동일 하이브리드 본딩은 DRAM 메모리층 사이에 범프를 추가할 필요 없이 상하층 구리를 직접 연결하는 방식이다.

마이크론 : HBM 메모리는 웨이퍼 용량의 3배 소비, 생산능력은 기본적으로 내년으로 예약 마이크론 : HBM 메모리는 웨이퍼 용량의 3배 소비, 생산능력은 기본적으로 내년으로 예약 Mar 22, 2024 pm 08:16 PM

21일 본 사이트의 소식에 따르면 마이크론은 분기별 재무보고서를 발표한 뒤 컨퍼런스콜을 가졌다. 컨퍼런스에서 Micron CEO Sanjay Mehrotra는 기존 메모리에 비해 HBM이 훨씬 더 많은 웨이퍼를 소비한다고 말했습니다. 마이크론은 동일한 노드에서 동일한 용량을 생산할 때 현재 가장 발전된 HBM3E 메모리는 표준 DDR5보다 3배 더 많은 웨이퍼를 소비하며 성능이 향상되고 패키징 복잡성이 심화됨에 따라 향후 HBM4 이 비율은 더욱 높아질 것으로 예상된다고 밝혔습니다. . 이 사이트의 이전 보고서를 참조하면 이러한 높은 비율은 부분적으로 HBM의 낮은 수율 때문입니다. HBM 메모리는 다층 DRAM 메모리 TSV 연결로 적층됩니다. 한 층에 문제가 있다는 것은 전체가 의미합니다.

Lexar, Ares Wings of War DDR5 7600 16GB x2 메모리 키트 출시: 하이닉스 A-다이 입자, 1,299위안 Lexar, Ares Wings of War DDR5 7600 16GB x2 메모리 키트 출시: 하이닉스 A-다이 입자, 1,299위안 May 07, 2024 am 08:13 AM

5월 6일 이 웹사이트의 소식에 따르면 Lexar는 Ares Wings of War 시리즈 DDR57600CL36 오버클럭 메모리를 출시했습니다. 16GBx2 세트는 5월 7일 0시에 예약 판매가 가능하며 가격은 50위안입니다. 1,299위안. Lexar Wings of War 메모리는 Hynix A-die 메모리 칩을 사용하고 Intel XMP3.0을 지원하며 다음 두 가지 오버클러킹 사전 설정을 제공합니다. 7600MT/s: CL36-46-46-961.4V8000MT/s: CL38-48-49 -1001.45V 방열 측면에서는 이 메모리 세트에는 1.8mm 두께의 올 알루미늄 방열 조끼가 장착되어 있으며 PMIC 독점 열 전도성 실리콘 그리스 패드가 장착되어 있습니다. 메모리는 8개의 고휘도 LED 비드를 사용하고 13개의 RGB 조명 모드를 지원합니다.

설치된 메모리가 Windows 11에 표시되지 않음 설치된 메모리가 Windows 11에 표시되지 않음 Mar 10, 2024 am 09:31 AM

새 RAM을 설치했지만 Windows 컴퓨터에 표시되지 않는 경우 이 문서가 문제 해결에 도움이 될 것입니다. 일반적으로 RAM을 업그레이드하여 시스템 성능을 향상시킵니다. 그러나 시스템 성능은 CPU, SSD 등과 같은 다른 하드웨어에 따라 달라집니다. RAM을 업그레이드하면 게임 경험도 향상될 수 있습니다. 일부 사용자는 설치된 메모리가 Windows 11/10에 표시되지 않는 것을 발견했습니다. 이런 일이 발생하면 여기에 제공된 조언을 사용할 수 있습니다. 설치된 RAM이 Windows 11에 표시되지 않습니다. 설치된 RAM이 Windows 11/10 PC에 표시되지 않는 경우 다음 제안 사항이 도움이 될 것입니다. 설치된 메모리가 컴퓨터 마더보드와 호환됩니까? 바이오에서

See all articles