스코프란?

참조 대상 식별자를 (identifier, 변수, 함수의 이름과 같이 어떤 대상과 구분하여 식별할 수 있는 유일한 이름) 찾아내기 위한 규칙.

식별자는 자신이 어디에 선언됐는지에 의해 자신의 유효한(다른 코드가 자신을 참조할 수 있는) 범위를 가진다.

 

스코프의 구분

전역 스코프 : 코드 어디에서든지 참조할 수 있다

지역 스코프 : 함수 코드 블록이 만든 스코프, 함수 자신과 하위 함수에서만 참조할 수 있다.

 

자바스크립트 스코프의 특징

자바스크립트는 타 언어와 달리 함수 레벨 스코프를 따른다. 

 

함수 레벨 스코프?

함수 코드 블록 내에서 선언된 매개변수와 변수는 코드 블록 내에서만 지역변수처럼 사용되고 함수 외부에서는 유효하지 않다

var a = 10;     // 전역변수

(function () {
  var b = 20;   // 지역변수
})();

console.log(a); // 10
console.log(b); // "b" is not defined

=> 변수 b는 지역변수이기 때문에 undefined가 출력된다.

 

함수 내 지역 영역에서는 전역과 지역 중 지역변수를 우선 참조한다

var x = 'global';

function foo() {
  var x = 'local';
  console.log(x);
}

foo();          // local
console.log(x); // global

 

함수 영역 내에서 전역변수를 참조해서 전역변수의 값을 변경할 수도 있다

var x = 10;

function foo() {
  x = 100;
  console.log(x); //100
}
foo();
console.log(x); // 100

=> 전역변수의 값이 변경된 결과가 나온다

 

 

단, ECMAscript6에서 도입된 let, const 를 사용하면 블록 레벨 스코프를 사용할 수 있다.

 

블록 레벨 스코프?

코드 블록 ({...}) 내에서 유효한 스코프

함수내부에서만 유효했던 것과 비슷하게, 블록 안에서 선언하면 자신을 정의하는 블록과 하위 블록에서만 접근이 가능하다.

 

 

전역 스코프

전역에 변수를 선언하면 어디서든지 참조할 수 있는 전역 스코프를 가진 전역 변수가 된다.

-> 전역 객체(Global Object) window의 프로퍼티이다.

의도치 않은 재할당에 의한 상태 변화로 코드를 예측하기 어려워지므로 사용을 억제해야 한다.

 

 

렉시컬 스코프

렉시컬 스코프는 함수를 어디에 호출하는지가 아니라 어디에 선언하였는지에 따라 결정된다.

자바스크립트는 렉시컬 스코프를 따르므로 함수를 선언한 시점에 상위 스코프가 결정된다.

var x = 1;

function foo() {
  var x = 10;
  bar();
}

function bar() {
  console.log(x);
}

foo(); // 1
bar(); // 1

=> bar()가 어디서 호출되었는지는 스코프 결정에 아무런 의미를 주지 않는다. bar는 전역에 선언되었기 때문에 

bar의 상위 스코프는 전역 스코프이고 전역 변수 x의 값 1을 두 번 출력하게 된다.

 

 

암묵적 전역(implicit global)

var x = 10; // 전역 변수

function foo () {
  // 선언하지 않은 식별자
  y = 20;
  console.log(x + y);
}

foo(); // 30

선언하지 않은 식별자에 값을 할당하면 전역객체의 프로퍼티가 된다.

y = 20 을 window.y = 20 으로 해석해서 y는 마치 전역 변수처럼 동작한다. 이러한 현상을 암묵적 전역이라고 한다.

// 전역 변수 x는 호이스팅이 발생한다.
console.log(x); // undefined
// 전역 변수가 아니라 단지 전역 프로퍼티인 y는 호이스팅이 발생하지 않는다.
console.log(y); // ReferenceError: y is not defined

var x = 10; // 전역 변수

function foo () {
  // 선언하지 않은 변수
  y = 20;
  console.log(x + y);
}

foo(); // 30

=> 단지 전역 객체의 프로퍼티로 추가되었을 뿐이기 때문에 변수가 아니다. 그러므로 변수 호이스팅은 발생하지 않는다.

 

 

스코프 체인

현재 스코프에서 식별자를 검색할 때 상위 스코프를 연쇄적으로 찾아나가는 방식을 말한다.

function a(){
     var a = 1;              
     function b(){
      	console.log(a);  
     }
     b();
}
a();

b() 함수 내에서 변수 a를 탐색하기 시작하는데,

만약 b() 함수에 변수 a가 없다면 함수 b()를 감싸고 있는 외부함수 a()를 탐색하게 된다.

이때 변수 a가 존재하면 a를 참조하게 되고 없다면 계속적으로 감싸고 있는 상위 함수를 탐색합니다.

결국 찾지 못하고 root인 Global Object 실행 컨텍스트까지 와서 a 가 없다면 VM500:1 Uncaught ReferenceError: a is not defined라는 에러를 출력한다.

함수가 생성(선언)될 때마다 렉시컬 환경이 만들어지고 그 안에 outer 참조값이 있다. 바로 이 outer 참조값이 상위 스코프의 렉시컬 환경을 가리키기 때문에 이를 통해 체인처럼 연결되는 것이다.

(= 함수가 생성되면 Execution Context가 생성되고, 그리하여 Lexical Environment 안의 outer Lexical Enviroment가 상위 Environment Record와 연결되면서 내부 함수 정보를 탐색할 수 있게 된다.)

 

즉, 내부 스코프에서 외부 스코프로 찾아가는 방식이다.

 

 

 

참고:

https://tyle.io/blog/54

https://poiemaweb.com/js-execution-context

https://github.com/baeharam/Must-Know-About-Frontend/blob/main/Notes/javascript/scope.md

 

'엘리스 ai 트랙 > FE' 카테고리의 다른 글

IIFE (즉시 호출 함수 표현식)  (0) 2022.02.28
var vs let vs const  (0) 2022.02.21
BFC (Block Formatting Context)  (0) 2022.02.05
z-index  (0) 2022.02.02
표준모드(standards mode)와 호환모드(quirks mode)  (0) 2022.01.23

콜백함수? 다른 함수의 인자로 넘겨지는 함수.

매개변수로 받는 함수가 콜백함수.

익명함수로 즉석에서 만든 함수도 콜백함수.

 

1, 2, 4가 콜스택에 있다가 실행된 뒤에 3초뒤에 3이 콜스택으로 들어와서 실행됨. => 1, 2 4, (3초 뒤에) 3

 

콜백함수를 이용해서 동기적으로 코딩할 수 있음. => 1, 2, (2초 뒤에) 3, 4

함수를 인자처럼 사용하려고 콜백을 쓰는 것이라고도 생각하자.

 

callback.js promise.js 

 

Promise의 3가지 상태

: pending(준비), fulfilled(이행), rejected(거부)

Promise를 이행상태로 만들어야 then을 사용할 수 있는 것이다.

 

new Promise()가 처리하는 쪽 (되면 resolve, 안되면 reject)

.then()은 Promise가 resolve를 호출했기 때문에 then()으로 들어오는 것. 요청하는 쪽.

두 쪽 모두 성공하는 경우와 실패하는 경우가 있어야 함.

**fetch가 Promise이다.

 

만약에 함수의 매개변수와 return문의 함수에 쓰이는 매개변수가 같으면 함수만 작성해도 됨.

 

return과 break의 차이는?

return은 반복문을 종료시킬 수도 있지만 반복문을 감싸고 있는 함수가 있다면 함수 자체를 종료시킨다.

break는 반복문을 실행하다가 그 즉시 실행을 멈추고 반복문을 종료시킨다.

continue는 명령을 건너뛰고 다음 명령으로 이동한다.

'엘리스 ai 트랙 > 개인 공부' 카테고리의 다른 글

비동기 통신  (0) 2022.02.08
FormData, 복리계산기 (3주차)  (0) 2022.02.07
IIFE를 알아보다가..  (0) 2022.02.05
closure 공부하기  (0) 2022.01.28
Node 객체 공부 중에  (0) 2022.01.26

개발자 모드에서 네트워크에서 서버와 브라우저가 통신하고 있는 것을 볼 수 있다

네이버 검색창에 '새ㅇㅇ'을 검색하고 있을 때 네트워크 상황

 

이고잉님 강의자료

https://docs.google.com/document/d/1bzKpUgF2fTlo3wA-qxyfg1Mqi6A5O9LhQDY-0JlXpGQ/edit#

 

json-server 레포지토리 사이트

https://github.com/typicode/json-server

 

fetch() cheetSheet

https://devhints.io/js-fetch

 

Json placeholder

https://jsonplaceholder.typicode.com/guide/

 

JSON.stringify()는 json으로 인코딩한 것이고 (객체 타입 -> 텍스트로 전환)

JSON.parse()는 원래 데이터 타입으로 디코딩한 것입니다. (텍스트 -> 객체로 전환)

 

JSON을 만든 사람의 사이트 주소?

https://json.org/json-ko.html

 

웹브라우저가 서버에게 이 데이터 타입은 JSON이라고 알려줄 때 사용하는 것?

'Content-Type': 'application/json',

 

rest API

resource
method: POST
method: GET

데이터가 resource , 그 데이터를 수정하는 방법들이 method (디폴트는 GET)

element

데이터 중에 특정한 데이터 하나를 가지고 오고 싶다면 그 한 건은 element

 

함수는 1급식이지만 if문은 2급식

setTimeout(function() { alert(1); }, 1000)

함수의 인자로 전달된 함수 : 콜백함수

 

fetch API 

내가 사용하는 함수의 리턴값이 Promise라면?

  1. promise는 then을 호출하면 된다.
  2. 이 then에는 함수를 넣어주면 된다. (=콜백함수)
  3. 그 함수는 이 작업이 성공했을 때 호출될 것이다
  4. 그 함수의 첫번째 파라미터엔 데이터가 들어가 있다.
  5. then은 두개의 파라미터가 있다. 
  6. 첫번째 파라미터는 성공할 때 실행되고, 두번째 파라미터는 실패할 때 실행될 것이다.
  7. 두번째 함수의 첫번째 파라미터에는 실패한 이유가 들어있을 것이다.

 

여기서 data는 response 객체이다. 서버가 응답한 정보들이 다 정리정돈돼서 우리에게 오는 것이다,

이 data를 JSON객체로 컨버팅해서 받고 싶다. -> 그러면 리턴한 값이 Promise이다

위의 코드랑 같은 코드임. promise를 그대로 return해주면 바로 뒤에 .then()을 해줄 수가 있다.

data.json도 비동기 작업, promise 작업이 이루어지고 then을 호출하는 것이다.

 

그런데, 너무 Promise로 리턴을 하게되면 then hell promise 현상이 발생할 수 있다.

 

생활코딩 promise 수업

https://www.youtube.com/watch?v=Sn0ublt7CWM 

생활코딩님 강의트리인 서말을 자주 이용하자...!!!!!!!!!!!!!!

https://opentutorials.org/course/3083

https://seomal.org/

 

'엘리스 ai 트랙 > 개인 공부' 카테고리의 다른 글

callback vs promise  (0) 2022.02.08
FormData, 복리계산기 (3주차)  (0) 2022.02.07
IIFE를 알아보다가..  (0) 2022.02.05
closure 공부하기  (0) 2022.01.28
Node 객체 공부 중에  (0) 2022.01.26

FormData?

form 필드와 그 값을 나타내는 일련의 key/value 쌍을 쉽게 생성할 수 있는 방법을 제공함.

FormData를 구현하는 객체는 entries()대신 for..of 구조를 직접 사용할 수 있다.

 

생성자: FormData()

for of 반복문으로 formData의 내부를 확인해보니까 각 요소들이 배열의 형태로 k-v쌍으로 들어가 있는 걸 확인할 수 있었다. formData 자체는 반복가능한 객체이다.

참고: for..of 명령문은 반복가능한 객체에 대해서 개별 속성값에 대해서 반복함.

 

참고: https://developer.mozilla.org/ko/docs/Web/API/FormData

 

FormData - Web API | MDN

FormData 인터페이스는 form 필드와 그 값을 나타내는 일련의 key/value 쌍을 쉽게 생성할 수 있는 방법을 제공합니다. 또한 XMLHttpRequest.send() (en-US) 메서드를 사용하여 쉽게 전송할 수 있습니다. 인코

developer.mozilla.org


 

formData객체를 key-value쌍을 이루는 하나의 객체로 만들기. (더이상 반복가능한 객체가 아님) 

 

Array.from() ?
유사배열 객체나 반복가능한 객체를 얕게 복사해 새로운 Array 객체를 만듬

 

formData.entries() ?

객체에 포함된 모든 k-v쌍을 통과하는 iterator를 반환.

 

참고: https://developer.mozilla.org/ko/docs/Web/API/FormData/entries

 

 


저 코드 상에서 Array.from을 사용하지 않으면 에러가 나오는데 그 이유는 뭘까?

?

formData.entries()를 할 때 그것은 구조상 array 같아보이지만 사실 그렇지 않다.

=> 유사배열로 이해하면 될 것 같다

 

NodeList 유형의 프로토타입을 보면 reduce 메서드가 없다는 걸 알 수 있다. 그래서 Array.from으로 전달해준다면 적절한 배열로 반환되고 reduce, map, 등 기타 배열관련 함수를 사용할 수 있게 된다!!

참고: https://stackoverflow.com/questions/38598801/map-reduce-is-not-a-function/38598861

 

유사배열이란?

DOM type은 배열처럼 보이지만 타입은 object이고 심지어 배열과 비교해보면 false가 출력된다.

 

 

배열이 아닌데 배열인 척 하는 것을 유사배열 혹은 유사배열 객체라고 부른다.

선언은 객체처럼 하고 반드시 length를 가져야 한다는 특징이 있다.

 

참고:https://kamang-it.tistory.com/entry/JavaScript15%EC%9C%A0%EC%82%AC%EB%B0%B0%EC%97%B4-%EA%B0%9D%EC%B2%B4Arraylike-Objects

 

 


formData = {principal: 1, rate: 2, year: 3, frequency: 1}
const {principal, rate, year, frequency} = formData
{
        principal : Number(principal),
        rate: Number((rate / 100).toFixed(2)),
        year: Number(year),
        frequency: Number(frequency)
 }

객체로부터 key 값을 한번에 가져와서 각 value 값을 한번에 바꿔줄 수 있다

 

 

'엘리스 ai 트랙 > 개인 공부' 카테고리의 다른 글

callback vs promise  (0) 2022.02.08
비동기 통신  (0) 2022.02.08
IIFE를 알아보다가..  (0) 2022.02.05
closure 공부하기  (0) 2022.01.28
Node 객체 공부 중에  (0) 2022.01.26

IIFE?

즉시 호출 함수 표현식.

주로 이름 충돌 최소화 및 private 변수 생성에 사용되는 자바스크립트 디자인 패턴 이다.

참고 사이트 : https://velog.io/@bisu8018/JS-IIFEImmediately-Invoked-Function-Expressions-%EB%9E%80

 //함수 단축 표현식으로 함수 리터럴을 사용하는데
  const time = function ()  {
    let min = 60;
    let hour = min * 60
    let day = hour * 24
    let week = day * 7
    let month = week * 4
    let year = month * 12
    
    return {min, hour, day, week, month, year};
}

console.log(time) //실행을 할 때 func로 만 출력하면 그 함수의 순수 코드내용이 보이게 된다.
// ƒ ()  {
//     let min = 60;
//     let hour = min * 60
//     let day = hour * 24
//     let week = day * 7
//     let month = week * 4
//     let year = month * 12
    
//     return {min, hour, day, week, month, year};
// }
console.log(time()) //실행을 할 때 func()로 출력해야 그 함수가 실제로 동작된 내용을 볼 수 있다.

IIFE (즉시 호출 함수 표현식)을 접했는데 이 표현식을 사용하지 않고 함수를 사용하는 방법엔 어떤 것이 있을지 뚱땅대다가 함수 단축표현식으로 함수리터럴을 만들었을 때의 사용법을 알게 됐다!

 

IIFE로는 time 상수를 선언한 마지막에 함수 호출 기호인 ()를 추가해주면 된다.

 

즉시 실행 함수는 그 즉시 실행된 뒤에 전역에서 사라진다. -> 전역변수 사용을 억제해준다

'엘리스 ai 트랙 > 개인 공부' 카테고리의 다른 글

비동기 통신  (0) 2022.02.08
FormData, 복리계산기 (3주차)  (0) 2022.02.07
closure 공부하기  (0) 2022.01.28
Node 객체 공부 중에  (0) 2022.01.26
git push 오류  (0) 2022.01.19

Block Formatting Context? (블록 형식 지정 컨텍스트)

웹페이지의 블록 레벨 요소를 렌더링하는 데 사용되는 CSS의 비주얼 서식 모델 중 하나.

=> 웹 페이지를 렌더링하는 시각적인 CSS의 일부로서 블록 박스의 레이아웃이 발생하는 지점과 floating 요소의 상호작용 범위를 결정하는 범위라고 볼 수 있습니다.

다음 조건 중 하나만 만족한다면 새로운 BFC를 생성할 수 있습니다

  • 루트 혹은 이를 포함하는 요소
  • float가 none이 아니면서 clear 되지 않은 경우
  • position이 absolute / fixed
  • display가 inline-block / tabel-cell / tabel-caption
  • overflow가 visible이 아님
  • display가 flex / inline-flex

잠깐 설명드리자면..!

더보기

overflow: hidden //부모요소의 범위를 넘어가는 자식요소의 부분은 보이지 않도록 처리

float: left //요소를 왼쪽으로 밀고 다른 요소가 주위를 둘러싸게 함

활용

1. 마진겹침 제거하기

https://codepen.io/BaeHaram/pen/YzXGZBd

마진 상쇄 제거효과
마진 상쇄? 요소의 margin 값이 겹칠 경우, 더 큰 margin만 적용되고 같다면 한 번만 적용되는 현상

마진 상쇄라는 특성 때문에 top 과 bottom에 각각 마진을 부여했지만 마진끼리 겹쳐서 10px만큼의 마진만 생기게 된다
=> BFC를 적용시키면 마진 상쇄효과가 없어지게 돼서 총 20px만큼의 마진이 생길 수 있다!

2. 부모가 자식을 모두 담지 못하는 경우 (float 사용)

https://codepen.io/BaeHaram/pen/oNXZBXJ

BFC 생성 전

BFC 생성 후

float을 사용하고 부모가 자식을 담지 못하는 경우에 BFC를 생성하게 해주는 코드를 넣으면 컨테이너가 담지 못했던 float을 담게 되고 float 크기만큼 커지게 됩니다!

float된 요소를 포함하는 컨테이너가 있는 경우가 많을 수 있는데 이 경우엔 보통 container를 clear시키는 방법을 사용합니다. 그런데 그것 말고도 BFC를 정의함으로써도 이것을 해결할 수 있는 것입니다!
=> float을 clear 시키는 다양한 방법 중에 여러가지가 있을 수 있는데 overfloe: hidden이 BFC를 생성하게 한 것입니다. 그래서 BFC는 float과의 상호작용에 영향을 미쳐서 float를 clear시키는 효과를 가져옵니다

BFC는 레이아웃 안의 작은 레이아웃이라고 생각하기
=> BFC 내부의 모든 요소는 설령 내부 요소가 float 상태라 하더라도 이 블록 안에 속한다. 그래서 float요소는 container 높이에 영향을 주게 된다.

3. float된 요소를 감싸는 텍스트를 분리하기

https://codepen.io/BaeHaram/pen/VwLpPvN

BFC 전(Figure 1) BFC 생성 후 (Figure 2)

Figure 1
p태그의 블록상자가 float 요소를 위한 공간을 만들기 위해 수평으로 좁아지게 됩니다.

BFC에서 각 상자의 왼쪽 가장자리는 container 블록의 왼쪽 가장자리에 닿게 됩니다. 그래서 새로운 BFC를 생성하지 않는다면 p태그의 텍스트가 증가한다면 float 요소 밑으로 이동될 것입니다.

In a block formatting context, each box’s left outer edge touches the left edge of the containing block (for right-to-left formatting, right edges touch). This is true even in the presence of floats (although a box’s line boxes may shrink due to the floats), unless the box establishes a new block formatting context (in which case the box itself may become narrower due to the floats).
참고: WSC

전체 요소를 이동할 수 있다면 이 감싸지는 문제는 해결될 것입니다.

Figure 2
p태그에 새로운 BFC를 생성하기!
=> 더이상 container 박스의 왼쪽 가장자리로 닿게 되는 문제가 사라지게 되므로 간단하게 감싸는 문제를 해결할 수 있게 됩니다!



출처:
https://www.sitepoint.com/understanding-block-formatting-contexts-in-css/
https://www.w3.org/TR/CSS21/visuren.html#block-formatting
https://tesseractjh.tistory.com/m/145
https://velog.io/@seod0209/TIL-14.-overflow
https://velog.io/@1-blue/%EB%B8%94%EB%A1%9D-%EC%84%9C%EC%8B%9D-%EB%A7%A5%EB%9D%BD

'엘리스 ai 트랙 > FE' 카테고리의 다른 글

var vs let vs const  (0) 2022.02.21
스코프  (0) 2022.02.14
z-index  (0) 2022.02.02
표준모드(standards mode)와 호환모드(quirks mode)  (0) 2022.01.23
사용할 링크 모음!  (0) 2022.01.23

z-index 속성은 다른 요소와 겹치게 될 때 요소의 순서를 지정하기 위해 사용됩니다.

요소들의 우선순위를 z-index가 정하고 숫자가 커질수록 렌더링 순서가 느려지므로 더 앞에 위치됩니다.

특정 요소의 렌더링 순서는 stacking context(쌓임맥락)을 생성하면서 자신의 z-index 값에 영향을 받게 됩니다.

 

그래서 z-index를 알기 위해선 먼저 stacking context(쌓임맥락)을 이해해야 합니다.

쌓임 맥락이란, HTML 요소들에 사용자가 바라보는 기준으로 가상의 z축을 생성하여 3차원 개념으로 보는 것

간단히 말해서, stacking context는 공통 부모가 있는 페이지의 "요소 그룹"입니다.

부모는 stacking context의 루트이며, 요소는 해당 요소 내부의 스택 순서로 배치됩니다.

예를 들어서 루트 요소( <html> )은 페이지의 모든 요소와 기타 stacking context를 포함하는 "전역" stacking context입니다.

 

x축은 화면의 오른쪽, y축은 화면의 왼쪽, z축의 방향은 보는 사람을 향함 (stacking context의 3차원 좌표계)

=> 웹 페이지와 그 안의 모든 요소에는 좌표 시스템이 있습니다. 그 시스템에 요소가 스택되는 3차원 z축이 포함됩니다.

z축 상에서 z-index에 따라 각 요소들이 "쌓이게" 된다.

이러한 쌓임맥락을 형성하는 조건들

  • position이 relative/absolute이면서 z-index가 auto가 아닌 요소
  • position이 fixed/sticky인 요소
  • opacity가 1보다 작은 요소
  • transform이 none이 아닌 요소

위 4가지는 가장 많이 쓰이는 속성들이니 따로 기억해두시는 게 좋을 것 같습니다!!

 

쌓임맥락의 특징들

  • 한 쌓임맥락이 다른 쌓임맥락을 포함할 수 있고, 함께 계층 구조를 이룹니다
  • 쌓임맥락에서 쌓임을 고려하는 것은 오직 자식요소들에 대해서 만이다.
  • 각 쌓임맥락은 독립적입니다. 요소의 콘텐츠를 쌓은 후에는 그 요소를 통째로 부모 쌓임맥락 안으로 배치합니다

 


 

브라우저의 기본 스택 순서를 3D로 표현

일반적으로 브라우저는 DOM 트리에서 먼저 오는 요소가 먼저 배치되고 뒤에 오는 요소가 이전 요소 위에 배치되게 됩니다. (페이지가 자연스럽게 흐른다면.)

z-index가 없는 경우에는 모든 요소들의 z-index 값이 none이 되게 됩니다. 

간단하게 stacking order는 기본적으로 html의 노출 순서와 같다고 볼 수 있습니다. 

그리고 그중에서 포지션이 사용된 요소는 그렇지 않은 요소보다 앞에서 노출되게 됩니다. 

 

 

z-index를 사용하는 순간은?

예를 들어, 어떤 지점에서 겹치는 절대 위치에 있는 두 요소가 있고 그중 하나가 소스코드상에서 앞에서 작성되어도 다른 하나 앞에 표시되도록 한다면 z-index 속성을 사용하면 됩니다. 즉, z축에서 렌더링되는 순서를 변경하려는 경우!

 

하지만,

여기서 가장 중요한 사항은 z-index는 position이 지정된 요소에서만 작동한다는 것입니다!

그래서 z-index에 따라서 요소에 값을 지정하여 다른 요소의 앞에 가져 오더라도 position이 되어있지 않는 한, 요소에 영향을 주지 않습니다.

브라우저의 새로운 스택순서

설정된 z-index에 따라서, 해당 요소가 속한 쌓임 맥락에서 순서를 먼저 지정하고 위에서 언급한 단계에 따라서 화면에 렌더링하게 됩니다.

 

 

참고: https://github.com/baeharam/Must-Know-About-Frontend/blob/main/Notes/css/z-index.md

 

GitHub - baeharam/Must-Know-About-Frontend: 취준생이라면 알면 좋을 프론트엔드 관련 지식들

:mortar_board: 취준생이라면 알면 좋을 프론트엔드 관련 지식들. Contribute to baeharam/Must-Know-About-Frontend development by creating an account on GitHub.

github.com

 

 

예제

&lt;div id=

각 쌓임맥락은 독립적이며, 부모 안의 자식 요소들은 부모 안에서만 쌓임이 고려된다

이 쌓임맥락의 계층구조

  • 루트
    • DIV #1 - 렌더링순서: 5
    • DIV #2 - 렌더링순서: 2
    • DIV #3 - 렌더링순서: 4
      • DIV #4 - 렌더링순서: 4.6
      • DIV #5 - 렌더링순서: 4.1
      • DIV #6 - 렌더링순서: 4.3
<div id="div1">
z-index: 5
</div>

<div id="div2">
z-index: 2
</div>

<div id="div3">
    z-index: 4

    <div id="div4">
    z-index: 6
    </div>
    
    <div id="div5">
    z-index: 1
    </div>
    
    <div id="div6">
    z-index: 3
    </div>
    
</div>

그래서 만약 z-index를 부여했는데도 동작하지 않다면 그 요소의 z-index 수준을 제한하는 부모요소가 있는지 먼저 확인해 봐야 합니다. 그것이 z-index의 동작을 제지하는 요인 중 하나일 것입니다.

 

 

 

출처:

https://tympanus.net/codrops/css_reference/z-index/

 

z-index - Codrops

The z-index property is used to specify the z-order of an element when it overlaps other elements. That is, it specifies whether the element is shown on top of other elements that it overlaps, or behind (or under) them. The z-order is the order of the elem

tympanus.net

https://github.com/baeharam/Must-Know-About-Frontend/blob/main/Notes/css/z-index.md

 

GitHub - baeharam/Must-Know-About-Frontend: 취준생이라면 알면 좋을 프론트엔드 관련 지식들

:mortar_board: 취준생이라면 알면 좋을 프론트엔드 관련 지식들. Contribute to baeharam/Must-Know-About-Frontend development by creating an account on GitHub.

github.com

https://developer.mozilla.org/ko/docs/Web/CSS/CSS_Positioning/Understanding_z_index/Stacking_without_z-index

 

z-index가 없는 경우의 쌓임 - CSS: Cascading Style Sheets | MDN

« CSS « CSS z-index 이해하기

developer.mozilla.org

https://dongmin-jang.medium.com/css-stacking-context-172f9bd1af8b

 

[CSS] Stacking context

Z-Index에 대해서 아무도 알려주지 않은 것

dongmin-jang.medium.com

https://developer.mozilla.org/ko/docs/Web/CSS/CSS_Positioning/Understanding_z_index/The_stacking_context

 

쌓임 맥락 - CSS: Cascading Style Sheets | MDN

쌓임 맥락(stacking context)은 가상의 Z축을 사용한 HTML 요소의 3차원 개념화입니다.

developer.mozilla.org

https://erwinousy.medium.com/z-index%EA%B0%80-%EB%8F%99%EC%9E%91%ED%95%98%EC%A7%80%EC%95%8A%EB%8A%94-%EC%9D%B4%EC%9C%A0-4%EA%B0%80%EC%A7%80-%EA%B7%B8%EB%A6%AC%EA%B3%A0-%EA%B3%A0%EC%B9%98%EB%8A%94-%EB%B0%A9%EB%B2%95-d5097572b82f

 

z-index가 동작하지않는 이유 4가지 (그리고 고치는 방법)

이 글은 https://coder-coder.com/z-index-isnt-working/의  번역글입니다. 오타 및 오역 제보 기쁘게 받도록 하겠습니다.

erwinousy.medium.com

 

 

 

'엘리스 ai 트랙 > FE' 카테고리의 다른 글

var vs let vs const  (0) 2022.02.21
스코프  (0) 2022.02.14
BFC (Block Formatting Context)  (0) 2022.02.05
표준모드(standards mode)와 호환모드(quirks mode)  (0) 2022.01.23
사용할 링크 모음!  (0) 2022.01.23

클로져를 활용한 타이머 구현하기
출처: https://webisfree.com/2015-07-07/[%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8]-%ED%81%B4%EB%A1%9C%EC%A0%80%EB%A5%BC-%ED%99%9C%EC%9A%A9%ED%95%98%EC%97%AC-settimeout%EC%9D%84-%EC%8B%A4%ED%96%89%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95

[자바스크립트] 클로저를 활용하여 setTimeout을 실행하는 방법

자바스크립트의 클로저(Closure)를 이해하고 이를 활용해 setTimeout() 함수에서 일어날 수 있는 일을 예측, 발생가능한 이슈를 수정하는 방법에 대하여 알아보려합니다.

webisfree.com

클로저?
외부 함수 안의 지역변수는 종료되어도, 내부 함수에서 사용될 수 있다.

외부 함수 안의 객체 안의 메서드로 된 함수도  내부함수이다.
외부 함수에 전해지는 매개변수가 있다면 이 매개변수는 외부 함수의 지역 변수가 되기 때문에 이것 또한 클로저로 작용할 수 있다 있다.

외부 함수에서 객체가 리턴됐을 때 객체의 메소드 함수가 있다면 이제 외부 함수의 지역 변수 또는 매개변수에 접근을 할 수 있는 권한은 이 객체의 메서드 함수에서만 가능한 것이다.

추가사항)
typeof 변수로  변수의 타입 값을 알기 위해서는 item typeof  string 이런 식으로 사용된다.
여기서, s가 대문자로 된 String이라면 1은 문자열이라고 인식을 안 하지만, 만약에 hi every라고 해도 문자열로 인식을 한다.
그렇기 때문에 String가 아니라 string로 표시를 해야 진정하게 우리가 원하는 문자열로(특수문자등이 포함되지 않은?) 판별할 수 있다.

공부출처: 생활코딩

'엘리스 ai 트랙 > 개인 공부' 카테고리의 다른 글

비동기 통신  (0) 2022.02.08
FormData, 복리계산기 (3주차)  (0) 2022.02.07
IIFE를 알아보다가..  (0) 2022.02.05
Node 객체 공부 중에  (0) 2022.01.26
git push 오류  (0) 2022.01.19
text가 뭐지??

DOM의 노드를 공부하다가 여러개를 시도해 봤다.
그런데 head와 body 사이에는 아무것도 없는데 대체 왜 text로 찍히는 걸까 의문점이 생겼다

\n ...!

text는 바로 줄건너뜀의 형식인 \n이었다...! 줄 건너뛸 때마다 text가 생긴 이유가 여기 있었구나.


이게 뭔 소린가 싶었다..


nodeType은 node의 type을 상수로 리턴합니다.

리턴 상수 타입 예제
1 element <p />, <div />
3 text Hello
4 CDATASection <!CDATA[[...]] >
7 ProcessingInstruction <?xml-stylesheet... ?>
8 Comment <!-- comment -->
9 Document document
10 DocumentType <!DOCTYPE html>
11 DocumentFragment  

출처: https://hianna.tistory.com/412 [어제 오늘 내일]


div 태그의 노드값은 null로 나오나 보다!
div 태그의 자식노드로 내려가서 노드값을 확인할 수 있다!


이렇게 되는 이유가 궁금했다!

toggle( String [, force] )
하나의 인수만 있을 때: 클래스 값을 토글링한다. 즉, 클래스가 존재한다면 제거하고 false를 반환하며, 존재하지 않으면 클래스를 추가하고 true를 반환한다.
두번째 인수가 있을 때: 두번째 인수가 true로 평가되면 지정한 클래스 값을 추가하고 false로 평가되면 제거한다.
출처: https://developer.mozilla.org/ko/docs/Web/API/Element/classList


firstChild vs firstElementChild
firstChild -> 요소노드, 텍스트 노드, 주석 노드로 반환한다
firstElementChild -> 요소노드로만 반환한다
그래서 HTML code 반영을 위한 접근을 위해서는 firstElementChild를 쓰자


animate의 속성들 알아보기 - fill mode에 대해서


innerHTML vs textContent

'엘리스 ai 트랙 > 개인 공부' 카테고리의 다른 글

비동기 통신  (0) 2022.02.08
FormData, 복리계산기 (3주차)  (0) 2022.02.07
IIFE를 알아보다가..  (0) 2022.02.05
closure 공부하기  (0) 2022.01.28
git push 오류  (0) 2022.01.19
참고 키워드
W3C (World Wide Web Consortium) ? 팀 버너스리를 중심으로 월드 와이드 웹을 위한 표준을 개발하고 장려하는 조직
렌더링 ?  html, css, javascript 등 개발자가 작성한 문서를 브라우저에서 그래픽 형태로 출력하는 과정

html, css, js -> DOM -> CSSOM -> Render Tree -> Layout -> Paint -> Composite 과정을 거친 후 웹 페이지가 로드됩니다!

(브라우저마다 렌더링 엔진이 존재하는데 웹프로그래밍을 하면서 사용되는 태그, 선택자들마다 엔진에 호환 범위가 다르기 때문에 엔진마다 웹 페이지가 다르게 동작할 수 있습니다. 하지만 w3c에서 정한 웹 표준 명세가 있기 때문에 대부분 비슷하게 보여줄 것입니다.)

출처: https://simostory.tistory.com/53

 

 

과거 웹 페이지는 넷스케이프 네비게이터용과 마이크로소프트 인터넷 익스플로러용 두 가지 버전으로만 만들어졌다.

네비게이터
익스플로러

웹의 모든 잠재력을 이끌어 내기 위해서는 웹 상호 간의 호환성이 있어야 한다는 "웹 상호 운용성"을 목표로, w3c는 웹 표준을 제정했다.

 

w3c에서 웹 표준을 제정할 당시에는 기존 브라우저들이 새로 만들어진 표준으로 대부분의 웹 사이트를 제대로 표현할 수 없었다.

그래서, 브라우저들은 렌더링을 할 때 표준 모드(새로운 표준으로 제작된 사이트)와 호환 모드(예전 방식으로 제작된 사이트를 렌더링하기 위한) 두 가지 모드를 제정했다.

 

두 가지 모드를 구분하기 위해 브라우저가 HTML에서 찾는 것 ?  DOCTYPE

문서의 첫 부분에 기술된 <!DOCTYPE html>을 기준으로 표준모드와 호환모드 중 무엇으로 렌더링할지 결정됩니다!

<!DOCTYPE html>
<html>
  <head>
    <meta charset=UTF-8>
    <title>Hello World!</title>
  </head>
  <body>
  </body>
</html>

 

익스플로러 9나 이전 버전에서는 DOCTYPE 이전에 주석이나 xml 선언부 등 무엇이든 작성된 상태라면 해당 문서를 호환모드로 렌더링합니다.

<meta http-equiv="X-UA-Compatible" content="IE=edge">

출처: https://webdir.tistory.com/38 [WEBDIR]

 

 

오늘날 현존하는 모든 브라우저들은 (옛날 익스플로러 6조차도) DOCTYPE을 표준 모드로 렌더링합니다. 더 복잡한 DOCTYPE을 사용할 필요도 없고 정말 특별한 경우가 아니라면 <!DOCTYPE html>을 명시하여 브라우저가 표준 모드로 렌더링하게 하는 게 권장됩니다!!

'엘리스 ai 트랙 > FE' 카테고리의 다른 글

var vs let vs const  (0) 2022.02.21
스코프  (0) 2022.02.14
BFC (Block Formatting Context)  (0) 2022.02.05
z-index  (0) 2022.02.02
사용할 링크 모음!  (0) 2022.01.23

+ Recent posts