다음 내용이 궁금하다면?
이미 회원이신가요?
2022년 10월 1일 오전 12:21
좋은 글 감사합니다.
제 글을 봐주셔서 감사합니다
좋은 글이네요. 감사합니다.
유익한 정보 감사드립니다!
감사합니다 실행컨텍스트를 이해하려고 하면 호이스팅이랑 스코프, 클로저는 자동까지는 아니더라도 이해하기가 훨씬 수월하더라구요.
좋은 글 감사합니다 ㅎㅎ
글을 읽어도 잘 이해가 가지않습니다. 어려운 개념인가요 😃
삭제된 사용자
2023년 10월 24일
C언어의 Extern을 공부하시면 더 쉽게 이해하실 수 있습니다!
개인적으로 저는 호이스팅이 변수를 끌어 올리는 것처럼 사용하는 것이라고 말해도 된다고 생각합니다. 당연히 기능적으로는 글쓴이 분 설명처럼 실제로 끌어 올리는 것이 아니라, 실행 컨텍스트가 각 변수와 함수의 식별자가 담긴 "환경 레코드"를 보고 어어? 이런 변수와 함수가 있어? ㅇㅋ 알겠음. 이렇게 미리 인지하고 소스를 돌면서 실행, 실행, 실행 하는 것이죠. 하지만 우리가 인지하는 실행 컨텍스트는 소스를 기준으로 항상 "위에서 아래"로 읽어나간다는 것이고 내가 실행하려는 변수와 함수를 지나지도 않았는데 이를 미리 알고 있으니 위로 끌어올려진 것처럼 보이죠. 그런데, 이런 식이면 사실 우리가 javascript에서 쓰고 있는 배열도 실은 배열로 부르면 안됩니다. 배열이라함은 데이터를 실제 메모리에 연속적으로 담고 있어야 하는데 javascript는 사실 그렇게 동작하고 있지 않죠. 배열의 항목들을 주소값으로 연결하여 마치 실제 배열처럼 이어진 데이터로 착각하게 만들어 주는 것이죠. 사실 저도 개발한지 좀 되었고 아직도 뭣도 모른채로 개발하고 다니지만, 갠적으로는 저렇게 직관적인 설명이 좋습니다. 물론 그 직관을 풀어 설명할 수 있는 백그라운드가 있으면 더 좋겠지만요.
@제일 좋은 의견 감사합니다. 먼저 오해가 있으신것 같은데요. 호이스팅이 변수를 끌어 올리는 것처럼 사용하는 것이라고 당연히 이야기 해도 됩니다. MDN에서도 '함수, 변수, 클래스 또는 임포트(import)의 선언문을 해당 범위의 맨 위로 끌어올리는 것처럼 보이는 현상' 이라고 정의하고 있습니다. 다만 제 지인이 답변한 '함수나 변수가 위로 끌어올려지는 자바스크립트 기능' 이라는 답변이 잘못되었다고 말씀드린겁니다. 실제로 위로 끌어올려지는건 아니니까요. 배열의 예시같은 경우는 MDN 에서 '여러 항목의 컬렉션을 단일 변수 이름 아래 저장할 수 있다' 고 정의하고 있습니다. 즉 JavaScript의 배열은 내부적으로 메모리에 연속적으로 담기는 '배열'과의 전통적인 정의와는 다소 거리가 있습니다. 하지만 프로그래밍 언어의 문맥에서 볼 때 '배열'이라는 용어는 단순히 메모리에 연속적으로 배치된 데이터 구조를 의미하는 것이 아니라, 여러 데이터 항목을 하나의 변수 이름 아래에 순차적으로 저장하는 어떤 형태의 구조를 가리키는 데 사용됩니다. 즉, 자바스크립트의 배열도 배열이라고 부를수 있습니다.
@김의중 태클처럼 들리실 수도 있겠지만 어느 부분이 오해인지 모르겠습니다. (제가 생각하는) - 사전적 의미의 호이스팅 = 변수나 함수를 최상단으로 끌어올리는 것 (글쓴이 분이 말씀하신) - 기능상 실제로 호이스팅 = 호이스팅은 정말로 위로 끌어올려지는것이 아니고, 변수나 함수를 선언 이전에 사용할 수 있기 때문에 끌어 올려지는 것처럼 보이는 것 (글쓴이 분께서 생각하는) - 사전적 의미의 배열 = 단순 메모리가 아닌 순차적으로 저장하는 자료구조 형태 (제가 생각하는) - 기능상 실제 배열 = 자료구조상의 배열은 무조건 메모리 공간을 위해서 앞뒤로 붙여서 저장되는게 맞음. 호이스팅도 구현체단계까지 보면 변수를 끌어 올리는게 아니듯 배열도 구현체까지 보면 데이터를 일렬로 저장 안함. 심지어 javascript 배열은 요소마다 할당하는 메모리 크기마저 다름. 결국 javascript는 거기서 얻는 성능절감효과가 미미해서 이부분을 포기하고 배열이 아닌 것을 배열처럼 보이게 해서 만든 기능임. 호이스팅은 구현체까지 보셔서 실제 함수와 변수가 위로 끌어 올려지는 기능이 아니라고 말씀하셨는데 배열은 왜 구현체까지 보지 않으시고 의미적인 부분으로만 보시는지에 대해서 이해가 가지 않았습니다. 배열도 의미상 연속적으로 배치된 데이터를 의미하는 것일 뿐이라면 호이스팅도 의미상 배치된 변수와 함수를 최상단으로 끌어올리는 것이 전혀 어폐가 없어보인다는 생각이 들어서요. 결국 자바스크립트의 배열도 배열이 맞다는 말씀하신다는건 자바스크립트의 호이스팅도 영문 그대로 "끌어올리다"가 맞는것일진데, 제가 어느 부분을 오해하고 있는지 이번 기회에 잘못된 부분을 고치고 싶어 다시 질문드립니다.
호이스팅 = 변수선언이 위로 끌어올려와지는것과 같은 현상 이라고 머리한켠에 기억하고있었는대 오늘 다시 정리를하게됐습니다 좋은정보 감사감사