[ JS ]Objects and the dot2020-08-25 18:43:55다른 프로그래밍 언어에서는 오브젝트와 함수를 두 가지 다른 것이라고 말하지만 자바스크립트에서는 두 개가 굉장히 밀접한 관련이 있다. 오브젝트는 어떤 형태로 우리의 컴퓨터 메모리상에 존재하고 있을까? 오브젝트는 property와 method를 가질 수 있다. 오브젝트는 property들의 집합으로 property는 name-value 페어의 집합이다. value에는 boolean, number 등 기본 타입이나 또 다른 name-value 페어의 집합이 올 수 있다. 오브젝트는 함수를 가질 수도 있는데 이 함수를 method라고 한다. 함수이지만 오브젝트와 연결되어 있는 것! 오브젝트뿐 아니라 오브젝트에 딸린(?) property와 method도 메모리 주소가 있다. 이렇게 다른 메모리에 저장되어 있는 p..
[ JS ]연산자의 우선순위와 결합법칙2020-08-21 21:52:29연산자의 우선순위 여러개의 연산자가 함께 쓰일 때 어떤 연산자 함수가 먼저 처리될 것인지를 결정한다. 연산자의 결합법칙 연산이 왼쪽에서 오른쪽으로 이루어질지 아니면 그 반대일지를 결정한다. 같은 우선순위를 가진 연산자 여러개가 한 줄에 쓰여 있을 때, 어떤 연산자를 먼저 계산할지를 결정하는 것이다. 즉, 첫번째로 연산자의 우선순위를 통해 순서를 결정하고 그 후에 같은 우선순위 내에서 결합법칙으로 순서를 결정한다. 곱하기는 우선순위가 14로 우선순위 13인 더하기보다 우선하므로 곱하기와 더하기가 함께 있으면 곱하기를 먼저 하고 더하기를 해야 한다. 예시 추가 예정 모질라 재단에서 제공하는 연산자 우선순위와 결합법칙 표! https://developer.mozilla.org/en-US/docs/Web/Jav..
[ JS ]연산자는 함수다2020-08-20 21:11:04연산자(operator)는 특별한 함수로 우리가 코드로 짜는 보통의 함수와는 조금 다르다 오퍼레이터는 보통 두 개의 매개 변수를 받고 하나의 결과를 리턴한다. var a = 3+ 4; console.log(a); 이 때, 콘솔에 나타나는 값은 몇일까? 7 굉장히 당연한 결과일 것이다. 그런데... 우리에게 당연한 이 결과를 자바스크립트는 어떻게 처리하는 걸까? --> 자바스크립트 엔진은 + 사인을 보면 + 양옆의 숫자를 더하라고 프로그래밍 되어있다. 이 때, + 사인이 바로 연산자이다. 더하기 연산자로 말한 것처럼 실제로는 함수의 한 형태이다. 원래 +(3, 4) 이런 식으로 인자를 넘겨주고 더한 값을 리턴하는 함수일 것이다. 그런데 이렇게 하면 아무래도 사용자가 느끼는 불편함이 크니까 새로운 표기 방식..
[ JS ]Type2020-08-17 23:08:54동적 타이핑 자바스크립트는 동적 타이핑(dynamic typing) 언어! 내가 코드를 짤 때 이 변수에 어떤 데이터 타입이 할당될 지 선언하지 않고 자바스크립트 엔진이 코드를 실행하면서 이 변수 데이터가 어떤 타입인지 알아낸다는 것이다. 그러므로 하나의 변수가 코드가 실행되면서 다른 타입의 데이터를 가질 수도 있다. var a = 'string_var' // a의 타입은 스트링이 됩니다. a = 1 // a의 타입은 숫자가 됩니다. cf) java나 c#같은 정적 타이핑(static typing) 언어는 변수에 어떤 데이터 타입이 할당될 지 선언해야만 한다. 다른 타입 데이터를 할당하려고 시도하면 에러가 난다. Primitive Types 자바스크립트에는 여섯가지의 기본 타입(primitive type..
[ JS ]undefined2020-08-06 19:19:31undefined는 무슨 뜻일까? not defined와 undefined는 같은 뜻일까? 답부터 말하자면, 그렇지 않다 undefined는 자바스크립트가 해당 변수에 아직 값이 할당되지 않았을 때 주는 특별한 value라고 할 수 있다 즉, hoisting을 했거나 var = a;까지만 해서 값이 할당되기 전에 변수 a에 부여되는 특별한 값이 바로 undefined다 undefined는 키워드로 혹시 변수의 값을 undefined와 비교할 일이 있다면 'undefined'라고 스트링처럼 표현하는 것이 아니라 그냥 undefined라고 쓰면 된다 아예 선언되지도 않은 변수를 호출하면 Uncaught Reference error가 난다 아예 메모리 공간이 할당조차 되지 않았기 때문이다 undefined는 ..
[ JS ]Hoisting2020-08-04 00:21:16var a와 function b를 정의하기 전에 호출을 한다면 어떻게 될까? 순서대로 실행하는 프로그래밍 언어의 특성상 에러가 난다 하지만!! 자바스크립트에서는 에러가 나지 않는다 자바스크립트는 `hoisting`을 하기 때문이다 Hoisting이 무엇인가요? 자바스크립트에서는 변수와 함수를 정의하기 전에 호출을 하게 되면 hoisting이라는 현상이 일어난다 밑에 정의되어 있는 변수와 함수를 위로 끌어올려주는 것이다 실제 저장된 위치를 옮기는 것은 아니다 이런 현상은 자바스크립트의 실행을 크게 이단계로 나눌 수 있기 때문에 벌어진다 첫 번째, 생성 the global execution context가 만들어진다 내가 짠 코드를 쭉~ 훑으면서 컴퓨터 언어로 해석할 준비를 한다 그리고 이렇게 훑는 과정에서..
[ JS ]Syntax Parsers, Execution Contexts, and Lexical Environments2020-07-29 20:39:03Syntax Parsers 내가 짠 코드를 읽고 1. 코드가 하는 일이 무엇인지 2. 유효한 문법으로 짜인 코드인지를 판단한다. 컴파일러나 인터프리터가 컴퓨터가 이해할 수 있는 언어로 바꿔주는 것 역시 이 작업. Lexical Environments function makeAFunction() { var basicVar = 'Hello World!'; } 내가 짠 함수가 코드의 어느 부분에 물리적으로 존재하느냐가 해당 함수의 렉시컬 환경을 정한다. 위의 코드에서 basicVar는 makeAFunction이라는 함수 안에 존재한다. 내가 짠 코드가 컴퓨터로 넘어갈 때는 이 모습 그대로가 아니라 컴퓨터가 알아볼 수 있는 형태로 변환이 된다. 프로그래밍 언어에서 렉시컬 환경이 중요한 이유는 렉시컬 환경이 1...