2023/05 29

전역변수사용을 억제해야하는 이유?

# 변수의 목숨이 붙어있는 시간 딥다이브에선 이걸 변수의 생명주기라고 하는데.. 그냥 이 변수를 참조할수 있는 시간을 말한다. //존나 //오래 //걸리는 //코드1 var value = '멍청이'; //존나 //오래 //걸리는 //코드2 이런식으로 전역스코프에 변수 value를 선언하였다 이걸 그림으로 그려보면 자바스크립트는 선언부분을 다 끌어올린다. 그래서 모든 식별자에는 메모리주소가 연결되고 그곳에있는 값으로 참조할 수 있다. 그림을 좀 복잡하게 그렸는데 걍 전역에서 선언한 변수는 코드가 끝날때까지 참조할 수 있다는거다.. 사실 그림이 정확하지 않는데 순서대로라면 선언부분 var value부분만 먼저 실행되고 오래걸리는코드1동안 undefined로 참조되고, 그다음 value = '멍청이'재할당문이..

스코프에 관해서

# 스코프란 무엇일까? {} //블록레벨 스코프? function fuc(){} //함수레벨 스코프? 스코프를 대충 중괄호다 라고 생각하는 사람들도 있을거다. 스코프에 대해서 어떤것인지 정확히 생각해보자. # 스코프란 식별자가 유효한 범위다. // --우주어딘가(전역) { // --집밖 var dog = "무찌"; { // -- 우리집 { // -- 무찌전용침대 다이소5천원짜리 } } } 얜왜 테두리 검은색이냐 // --우주어딘가(전역) { // --집밖 let dog = "무찌"; { // -- 우리집 { // -- 무찌전용침대 다이소5천원짜리 } } } 요렇게 var이나 let으로 선언한 dog이라는 변수에 값으로 무찌가 바인딩 되어있다. 그리고 블록문을 중첩해서 써놨다. 대충 이름붙여서 우주/집밖/..

선언문에서 let var const를 빼고 선언한다면?

# 일반적인 선언문 let value = "바보"; console.log(value); 일반적인 선언문은 이렇게 생겼다. 그런데 자바스크립트는 ㅈ같이도 아래와 같은 코드도 동작한다. # let var const없이 선언한 변수 value = "바보"; console.log(value); 잘불러온다..ㅡㅡ 이걸 use strict와 같이쓰면 에러뿜어준다. 될수있으면 선언문을 쓸때 let const를 써서 변수선언을 하자. 파이썬에서 온 사람들은 이거 짜증날거다 ㅠ 근데 이건 변수선언이 아니다! # 이러한 경우에서 호이스팅은? console.log(value); value = "바보"; 없는 value를 참조하려했다고 에러뿜어준다. 이 코드가 변수선언으로 동작할때는 호이스팅이 된다고 볼수 없다.(아래에 더씀..

함수 호이스팅

# 호이스팅이란? https://jacobowl.tistory.com/136 변수 호이스팅, 그리고 초기화 initialize, Temporal Dead Zone 초기화는 변수선언시에 최초로 undefined가 할당이 되는것을 말한다. 먼저 그림으로 살펴보면, let value = 'hello world'; 라는 코드가 실행되면 먼저 식별자 value가 가르키는 메모리주소1이 생성되고 이 jacobowl.tistory.com 이전에 변수의 호이스팅에 대해서 포스팅을 했었다. 코드는 위에서 아래로 순차적으로 실행되지만 변수를 선언하기전에 참조가 가능한걸 변수호이스팅이라고 한다. 함수도 이렇게 정의(함수는 선언이 아니라 정의라고함)하기 이전에 호출이 가능한걸 함수 호이스팅이라고 한다. # 함수 선언문에서의 ..

함수의 진짜 이름

# 기명함수와 익명함수console.log(function fuc() { return "뿩!"; }, ": 기명함수/ 이름이 있는 함수래~"); console.log(function () { return "뿩!"; }, ': 익명함수/ 이름이 없는 함수래~');둘다 함수리터럴로 평가되서 함수객체를 참조한다. 기명함수와 익명함수를 함수리터럴로 참조해서 콘솔로찍어보면 저렇게 참조한다. 브라우저에서 console.dir로 보면 명확히 알 수 있다.브라우저상에서 console.dir로 프로퍼티들을 살펴보면 name을 키로 갖는 프로퍼티에 기명함수는 'fuc'라는 스트링이 값으로 나와있고, 익명함수는 그냥 빈 스트링 ""이 나와있다. # 함수이름console.dir(function fuc() { return "뿩..

함수 리터럴에 대해서

# 먼저 리터럴에 대해서 다시 살펴보자. https://jacobowl.tistory.com/137 값(value), 리터럴(literal), 표현식(expression), 문(statement)# 리터럴(literal) 리터럴은 사람이 알아보는 기호로 적은 표기법을 말한다. 이전 '메모리에 저장되는 기본구조' 포스팅에서 컴퓨터는 데이터를 2진법으로 저장한다고 했었다. 메모리에 저장되는 jacobowl.tistory.com 위 포스팅에서 리터럴에 대해서 설명을 했었다. 리터럴이란 우리가 직접 vs코드에 치는 사람이 알아볼수 있는 코드이고, 이 리터럴이 자바스크립트엔진에의해 평가되어 메모리에 값으로 저장된다. 리터럴은 표현식에 포함된다. # 함수는 객체다 https://jacobowl.tistory.com..

primitive타입, object타입 mutable(변경가능함)

원시타입은 흔히 우리가 변수에 할당하는 스트링 넘버 등이 있고, 객체타입은 말그대로 객체타입이다. 어레이, 객체, 함수등이 있다. 원시타입과 객체타입은 근본적으로 메모리접근,참조방법에서 다르다. # 원시타입의 메모리 활용방법 원시타입인 값은 그냥 뭐 스트링 숫자 이런거다.. 뭐 이전 포스팅에서 오지게 설명했던 부분이다. 변수(식별자)는 메모리주소랑 연결되어있고 이 메모리주소는 실제 데이터가 들어있는 공간에 접근하여 데이터를 가져온다. # 원시타입은 immutable(변경불가능한)값이다!! let value = 'muzzi'; value = 'dori'; 예시로 이 코드에서 메모리공간이 활용되는 것을 보자. 참고로 우리집 개들 이름이 무찌랑 도리다.. 앞으로 자주보게될거다.. 맨처음 value를 선언할때 ..

롤스토이 // 피부보정, 힐링브러시 필터

원본사진이다 # 힐링브러시툴 이거 레이어복사해서 큰거제거라고 이름붙여줌 그럼 여기서 이제 이거 클릭 알트누르면고 클릭하면 원하는 색 지정 그냥클릭하면 브러쉬 작동 물론 페더 조절하고하샘 요 눈밑 여드름을 지워버렸다.. 요렇게 지웠음 # 피부보정 (필터) 레이어 복사하고 난 이걸 피부보정이라 명명하였다. - 가우시안블러 뭐 가우시안블러는 백만번 본것같다. 이거누르면 이 창 뜨는데 10픽셀로 바꾸샘 - 노이즈 메디안 5픽셀 하샘 - 필터갤러리 요기 클릭하면 이렇게 새창뜸 텍스쳐에서 텍스츄라이저 클릭하고 저기서 스케일링을 sandstone으로 바꾸고 스케일링 50퍼, 릴리프 1로 하고 오케이 사진이 최종적으로 이렇게 되부렀다.. # 레이어마스크 반전으로.. 레이어 마스크를 만들면 기본으로 하얀색이 된다 이걸 ..

롤스토이 // 굴곡넣어 이미지 합성

# 일러스트에서 포토샵으로 오브젝트 가져오기 그냥 일러스트에서 원하는 오브젝트 복사해서 포토샵에서 붙여넣기 그렇게하면 이런창이 뜸. 여기서 스마트 오브젝트 하면 벡터처리해줌. (픽셀하면 픽셀이라서 크기 조절하면 깨짐) 인스타로고를 가져왔당. # 렉탱귤 색만들기 맨처음 만들때 이렇게 되는데 색변경하는게 어려웠음.. 근데 그냥 위 탭쪽 아래 보면 있음. 여기서 필을 기본설정이 투명색으로 해놨네.. 바꾸면댐 # 레이어끼리 align 위쪽탭에 있다.. 포토샵에 align이 왜없나 싶었다.. # convert to smart object 이렇게 사각형은 좀 투명하게하고 인스타 로고랑 레이어 두개 다 잡아서 convert to smart object로 바꾸샘 뭔진 잘모름. 여기서 프리트랜스폼 모드로 들어가면 마우스..