javascript this self 차이점

구글링쟁이 k9e4h 2016.08.16 13:25

JavaScript의 this는 기존 언어에서 사용하던 this와는 다릅니다. 비슷한 의미로 사용될 때도 있지만, JavaScript의 this는 여러 가지 함수가 호출되는 방식(호출 패턴)에 따라 참조(바인딩)하는 객체가 다르기 때문입니다.

자바에서의 this는 인스턴스 자신을 가리키는 참조변수입니다. this가 객체 자신에 대한 참조 값을 가지고 있다는 것입니다. 주로 매개변수와 객체 자신이 가지고 있는 변수의 이름이 같을 경우 이를 구분하기 위해서 사용됩니다.

javascript의 this가 해당 함수 호출 패턴에 따라 어떻게 객체를 참조(바인딩)하는지에 대한 규칙

1. 기본적으로 this는 전역 객체를 참조한다.
2. 메소드 내부의 this는 해당 메소드를 호출한 부모 객체를 참조한다.
3. 생성자 함수 코드 내부의 this는 새로 생성된 객체를 참조한다.
4. call()과 apply() 메소드로 함수를 호출할 때, 함수의 this는 첫 번째 인자로 넘겨받은 객체를 참조한다.
5. 프로토타입 객체 메소드 내부의 this도 해당 메소드를 호출한 부모 객체를 참조한다.
6. JavaScript의 this 키워드는 접근제어자 public 역할을 한다.

JavaScript에서는 내부 함수 호출 패턴을 정의해 놓지 않기 때문입니다. 내부 함수도 결국 함수이므로 이를 호출할 때는 함수 호출로 취급되어 함수 호출 패턴 규칙에 따라 내부 함수의 this는 전역 객체를 참조하게 됩니다.

[출처] javascript의 this 키워드 를 요약


함수 실행에 있어서 this의 바인딩은 함수의 직접적인 호출부에 따라 달라진다. 이단 호출부를 식별한 다음 4가지 규칙을 열거한 우선순위에 따라 적용한다.

1. new로 호출했다면 새로 생성된 객체로 바인딩된다.

2. call이나 apply 또는 bind로 호출됐다면 주어진 객체로 바인딩된다.

3. 호출의 주체인 콘텍스트 객체로 호출됐다면 바로 이 콘텍스트 객체로 바인딩된다.

4. 기본 바인딩에서 엄격 모드는 undefined, 그 밖엔 전역 객체로 바인딩된다.


self는 통상적인 변수 이름이지만, 바깥쪽의 this를 참조하기 위해 일반적으로 사용된다. 또한 클로저와 결합하여 this의 값을 주고 받는 용도로 사용할 수도 있다.


[stackoverflow의 동일 질문] difference between using variable self vs this

[javascript guide] https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide

[opentutorials의 javascript] https://opentutorials.org/module/532/4650

[javascript 클로저] http://www.gliderwiki.org/wiki/137



출처: https://k9e4h.tistory.com/141 [Kim's :D]

<tr> -> table row  셀의 가로줄 생성

<th> -> table header 셀의 제목 데이터 생성

<td> -> table data 셀의 데이터 넣기


a 태그에는 함수 호출시 리턴 값이 있으면 리턴 값을 보여주기 위해서 브라우저에 나타납니다. 그래서 보통 a 태그에 스크립트 함수를 호출할때는 리턴 값을 주지 않습니다.

예1)
<a href="#" onclick="함수();">
함수에 리턴값이 있던 없던 상관 없음
그러나 클릭하는 순간 링크 "#" 때문에 페이지의 최상위로 이동됨

예2)
<a href="javascript:함수();">
브라우저에 리턴값이 출력되므로 리턴값이 있으면 안됨, 

예3)
<a href='javascript:void(0);' onclick="함수();"> 
함수에 리턴값이 있던 없던 상관 없음
클릭해도 페이지의 최상위로 이동하지 않음



출처: https://marga.tistory.com/80 [margalog]

우선 질문 + 용어정리가 우선일듯하다.


1. 이전과 같이 <script ~~>가 왜 안들어가는지 이전에는 데이터바인딩 하려면 꼭 들어가야 하는줄 알았는데


2. xmlns:th="http://www.thymeleaf.org" 은 무슨 의미일까?

-> Server-side Template Engine으로 순수 HTML문서에 HTML5문법으로 Server-side로직을 수행하고 적용시킬 수 있다.

->Thymeleaf는 순수 HTML에 HTML5문법을 사용하여 Server side 로직을 수행할 수 있는 HTML 태그 및 속성 기반의 Template Engine입니다.

xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"

layout:decorator="/common/defaultLayout"


angularjs, reactjs, viewjs 등이 웹 회면에서 많이 사용되면서부터 Server-side template language의 역활이 많이 감소하였습니다. 지금 프로젝트에서도 주 역할은 화면 구성 정도 입니다. 기존에 화면 구성은 Tiles, Sitemesh 등을 많이 사용하였는데 요즘은 개인적으로 Thymeleaf을 많이 선호하는 편입니다. Thymeleaf이 layout 구성하는데 쉽고 명시적이기 때문입니다. 

3. <script th:inline="javascript">

-> 스크립트 태그에 인라인 속성 추가

-> 서버에서 view로 넘긴값을 html의 javascript에 json형태로 넘김

-> 여기서 인라인이라는 의미는 서버에서 뷰 생성을 위한 데이터를 웹브라우저로 그대로 넘긴다는 의미로 볼 수 있다.

-> 이렇게 넘기는 객체를 json으로 변환해서 변수에 할당하면 javascript 라이브러리에서 바로 사용할 수 있다.

-> 이런 기능이 없다면 최초의 데이터는 서버스크립트로 처리하고 자바스크립트에서 데이터를 읽어오기 위해서는 ajax로 별도의 서버요청을 통해서 데이터를 읽어와야된다.

Vue 인스턴스를 생성하는 역활을 합니다.

https://adrenal.tistory.com/18 


4. div와 span은 단지 레이아웃을 만드는 태그이다. div의 display속성은 block이고, span의 display 속성은 inline이다.

block은 말그대로 하나의 큰 사각형 틀이고, inline은 직렬, 횡렬이라는 뜻

쉽게 정리를 하자면 div라는 블록은 하나의 큰 사각형 박스이므로 한 줄에 하나씩만 생기지. span은 직렬, 횡렬이므로 한 줄에 여러 개가 다닥다닥 붙어있게 되는거야. 

이것만 가지고 설명이 안 되는 부분이 있지. 왜 div는 가로세로 사이즈가 적용이 되는데 span은 안 될까? 스판이니까 쭉쭉 늘어나야 되는 거 아닌가? inline의 사전적 의미 외에 한 가지를 더 붙여보자. inline 속성은 그 안에 들어가는 내용의 크기만큼만 커진다는 거지. span 태그 안에 크기가 큰 이미지가 들어가면 더 커지고, 작은 게 들어오면 작아진다는 소리야. 그러니까 정말로 스판(=span) 쫄쫄이랑 똑같지? 

http://mkcomputer.co.kr/bbs/board.php?bo_table=menu1_1&wr_id=75&page=5


5. HTML,CSS,JavaScript 설명

  • HTML 은 웹 페이지상에서 문단, 제목, 표, 이미지, 동영상등을 정의하고 그 구조와 의미를 부여하는 마크업 언어이다.
  • CSS 는 배경색, 폰트, 컨텐츠의 레이아웃등을 지정하여, HTML 컨텐츠를 꾸며주는 스타일 규칙 언어이다.
  • JavaScript 는 동적으로 컨텐츠를 바꾸고, 멀티미디어를 다루고, 움직이는 이미지등 웹 페이지를 꾸며주도록 하는 프로그래밍 언어이다. 물론, 전부는 아니지만 몇 줄만의 자바스크립트 코드만으로 꽤나 훌륭한 작품을 만들 수 있다.
6. javascipt 구체적인 설명

 자바스크립트란? 

자바스크립트를 한마디로 요약하자면 웹을 풍부하게 만들어주는 작고 가벼운 언어입니다. 미국의 넷스케이프 커뮤니케이션즈사(Netscape Communications)가 개발한 스크립트 언어이며. 웹 브라우저에서 실행하는 스크립트 언어를 기술합니다. 작고도 빠르기 때문에 웹문서를 동적으로 꾸밀 때 가장 널리 쓰입니다. 언어 규격은 자바의 부분 집합(subset)으로 되어 있습니다. 하이퍼텍스트 생성 언어(HTML) 문서를 작성하는 수준의 사용자가 사용하는 것을 주안점으로 하여 자바의 언어 규격으로부터 변수의 형(정수형이나 문자열형 등)을 생략하거나 새로운 클래스 정의를 할 수 없도록 하였습니다. 스크립트는 HTML 문서 속에 직접 기술하며, ‘<script>’라는 꼬리표를 사용합니다. 프로그래밍 입문자들은 자바스크립트와 자바가 서로 비슷한 기술이라고 생각하곤 합니다. 두 언어 모두 자바라는 언어를 기반으로 하고 있기 때문이죠. 하지만 자바스크립트는 자바와는 다른점이 상당히 많습니다. 기능과 사용법까지 완전히 다릅니다.


자바vs자바스크립트



자바스크립트의 특징 

1. JavaScript는 객체 기반의 언어입니다. 하지만 상속과 클래스라는 개념은 없습니다.

2JavaScript는 인터프리터 언어로서 클라이언트의 웹 브라우저에 의해 해석되고 실행됩니다.

3. JavaScript는 HTML문서 내에 기술되고 HTML 문서와 함께 수행됩니다.

4. JavaScript는 HTML에 연산 제어 등 프로그래밍적인 요소를 추가하고 클라이언트의 자원을 활용할 수 있게 합니다.



자바스크립트의 역할 

자바스크립트의 일반적인 용도는 웹 페이지에 기능을 더해 HTML 웹 페이지를 동적이고 살아 있게 만드는 것입니다. 한마디로 HTML은 겉으로 보이는 프론트핸드, 자바스크립트는 겉으로 보이지않는 백핸드라고 할 수 있겠군요.


자바스크립트는 다음과 같은 일을 할 수 있습니다.

1. HTML 페이지 변경 및 HTML 엘리먼트와 콘텐츠의 추가나 제거

2. CSS 및 HTML 엘리먼트의 스타일 변경

3. 사용자와의 상호작용, 폼의 유효성 검증

4. 마우스와 키보드 이벤트에 대한 스크립트 실행

5. 웹 브라우저 제어, 쿠키 등의 설정과 조회

6. AJAX 기술을 이용한 웹 서버와의 통신

7. 동적인 효과 이미지 롤오버 상태표시줄에 문자열표시 등등

8. 웹사이트의 기능적인 면 쿠키처리, 새로운 Window열기 등등


요즘 시대에 자바스크립트가 많이 발전되어 어떤 웹사이트에보면 JSP나 PHP같은 언어없이 HTML과 JavaScript로 만으로 이루어진 웹사이트가 등장 할 정도입니다. 



 자바스크립트의 장단점 

자바스크립트의 장점

자바스크립트는 컴파일 과정이 없기 때문에 다른 언어와 비교했을 때 빠른 시간 안에 스크립트 코드를 작성할 수 있게 도와줍니다. 기존 C나 자바 언어와 달리 굉장히 단순한 구조와 원칙을 가지고 있기 때문에 초보 개발자들이 쉽게 배우고 이해할 수 있습니다. 예를 들어 자바스크립트 코드 안에서는 변수, 클래스 및 메소드를 선언하지 않아도 되고, 메소드가 ‘public’, ‘private’ 또는 ‘protected’인지 구분하지 않아도 됩니다. 자바스크립트는 웹에 특화된 기술이기 때문에 운영체제나 플랫폼에 상관없이 잘 작동되고 확장성도 높습니다.


자바스크립트의 단점

단점은 성능이나 보안 측면입니다. 일단 내부에서 제공되는 기능이 제한적이고, 관련된 개발도구도 적은 편이고요. 또한 자바스크립트는 HTML 소스코드에 함께 작성되면서 소스코드가 외부로 공개되는데, 이 과정에서 보안 취약점이 발생할 수 있습니다.



7. <div id="myTagCategory">
<div id="wrap">
id 2개하는 이유 + class 차이

id는 스타일을 지정할 떄 한 가지만 지정해서 쓰는 이름이고 하나의 문서에 고유한 id하나밖에 쓸수 없습니다.

class 그룹으로 묶어서 스타일을 지정할 때 쓰는 이름이다.

ID,CLASS 이름은 자유롭게 지을 수 있지만 수자로 시작하면 안된다.

* 스타일을 주는 방식중 (inline, internal,external)이렇게 3가지가 있다.

id와 class의 차이점
-id는 한 페이지에 하나의 정의(style/css)로 하나의 태그(id="")만 사용할 수 있다. 즉, 로고, 상단메뉴, 하단정보 같은 스타일을 지정할 떄 id를 사용한다.
-class는 한페이지에 반복적으로 사용되는 스타일을 정의 할 수 다.

반복적으로 사용되는 스타일에는 class를 사용하여 그 내부에 세부 스타일을 정의 할 때는 id를 사용하면 좋다.


다른 태그들을 배우기 전에 id와 class에 대해서 알아보고 가겠습니다.

id란 무엇일까요 ? 회원가입을 할 때 입력하는 id를 생각해보시면 간단합니다. 동일한 id는 존재할 수 없습니다. 동일한 것이 없으니 고유 식별자라고 표현할 수 있겠네요. HTML 문서도 마찬가지입니다. id는 중복될 수 없고, 단 하나여야 합니다. 그리고 주어진 id를 제어할 때는 "#id값"으로 제어 할 수 있습니다. 소스코드를 보시면 <div>태그에 one, two, three, four라는 id값을 각각 주었고, <style>태그 내부에 #one, #two, #three, #four이라는 형태로 제어하고 있는 것을 볼 수 있습니다. 

HTML문서 내에서 동일한 id값은 중복 사용 못하고, 제어할 땐 #id값 이라는 형태를 씁니다.  

똑같은 형태로 꾸밀건데 하나씩 제어해야 한다면 엄청 불편하겠죠? 그럴땐 그룹을 묶고 그 그룹에 똑같은 스타일을 지정해 준다면 아주 편할 겁니다. 그래서 class값이 필요합니다. class는 id와 다르게 똑같은 class값을 여러 태그에 줄 수 있습니다. 소스코드를 보시면 큰 상자를 나타내는 <div>태그마다 "many"라는 같은 class값을 주었습니다. class 값을 여러 태그들에게 줄 수 있다면 어떤 태그는 두개 이상의 class 값을 가질수도 있습니다. 그럴땐 class="first second"처럼 띄어쓰기로 구분해서 first와 second라는 두개의 class값을 줄 수 있습니다. 그리고 제어할 때는 .class값 이라는 형태를 씁니다. 소스코드 에서도 many라는 class값을 가진 태그들에게 똑같은 스타일을 지정한 것을 볼 수 있습니다.

id와 다르게 class는 중복 사용 가능하고, 값을 여러개 줄 땐 class="first second"처럼 띄어쓰기로 구분하고, .class값 이라는 형태로 제어한다.


8. <ul>태그와 <li>태그

ul -> unordered list의 약자로, 순서가 필요없는 목록을 만든다.

li -> list item의 약자로 각 항목들을 나열 할 때 사용


9. <pager v-if="loadedCount" :parameters="parameters" :count="totalCount" v-on:pagechange="onPageChange">

v-on 은 이벤트 핸들러로 무엇인가 클릭하거나 change할때 많이 사용된다. 페이지를 바꿀때 사용하기 때문에 필수적이다.



+ Recent posts