Empty elements Closing




area, base, br, col, embed, hr, img, input, link, meta, param, source, track, wbr  이러한 요소들을

빈요소라고도 불리며 Empty element === Void element 라고도 부른다.




나는 HTML을 처음 교육받을 때 부터 HTML5를 배워서 그런지

빈요소를 사용할 경우 클로징할때 슬래시( / )를 사용하지 않았다.




하지만 어느날 내가 작성하고 수정한 코드를 검토하던 팀장님께서 


개발팀장님

: 저는 가급적이면 빈요소를 사용할때 슬래시(/)를 사용해서 닫는 주의자입니다. 

빼도 되는거면 그에 대한 설명한 문서 자료를 남겨주면 좋겠습니다.


라는 요청을 받았다.




처음엔 당혹스러웠다.  당연히 이전엔 사용했다고 했지만 HTML5에선 빠져도 된다고 배워왔으니까...  


문제였다. 그렇게 배워 사용은 했지만 '왜?' 에 대해 전혀 생각하지 않았다. 




나는 구글링을 시작했다.....




W3C Reference

2017.10.3

https://www.w3.org/TR/html51/syntax.html#writing-html-documents-elements

2017.10.24

http://w3c.github.io/html/syntax.html#elements-0

SYNTAX

http://w3c.github.io/html-reference/syntax.html#syntax-elements


레퍼런스를 보면

슬래시(/)로 클로징 하는것은 XHTML에서는 필수사항이지만, 

HTML5 권고안에선 슬래시 기호를 사용해서 클로징하는것은 옵션이다.




그리고 사람들의 의견은 분분했다.


사용해야 한다 의견  :  옵션이니까 이전에 사용하던대로 사용하는것이 편하다. (명시적이기도 하니까..)


하지 않아도 된다 의견  :  굳이 왜 사용하냐? 슬래시(/)가 허용은되지만 의미가 없다. 그러니 사용하지 않아도 된다.





참고




자... 난 모르겠다. 

일단 사용하고 안하는것에 대해선 기능적 오류적 문제가 없는것으로 보인다... (있다면 알려주세요..)


이런 저런글을 보고 판단이 든것은 

일단, 클로징을 슬래시(/)를 사용하든 안하든 코드를 작성할 때 일관성을 유지하면 될것 같다.





자바스크립트 변수


상수와 변수

상수(Constant)

  • 변하지 않는 수
  • 변경이 없음 숫자 10은 10이다 값이 바뀔일이 없음
  • 변수와 구분하기 위한 목적으로 상수의 이름은 모두 대문자로 작성 표기
  • 코드가 실행 중인 상황에서 값을 변경할 수 없다
  • 상수를 공식적으로 지원하는 것은 ECMAScript 2015 버전부터 지원함
    • 이전까진 IE에선 상수를 지원하지 않아서 굳이 사용하지 않았음.
    • 앞으로 상수가 얼마나 활발하게 사용이 될진 아직 모름

변수 (Variables)

  • 자료를 담는 공간(그릇) == 메모리 공간
  • 변수의 값은 메모리cpu에 저장됨
  • 한개의 값만 저장 할 수 있다.
  • 변하는 수 : 어떤값을 넣느냐에 따라 값이 변동됨
  • 데이터 유형에 따라 값을 복사를 할수도 있고 참조 할수도 있다.
  • 변수는 값이 담긴 데이터로 접근하도록 하는 식별자이다.
  • var 키워드로 변수 선언 var 변수이름 = 정보유형;
// 변수(Variable) VS 상수(Constant)
var bim = 'LG bim';
const HOUR = 60;

// 변수는 실행 중인 상황에서 값을 변경할 수 있는 반면
console.log('bim', bim);
// 상수는 실행 중인 상황에서 값을 변경할 수 없다
console.log('HOUR', HOUR);

//값 변경
bim = 'samsung';  
HOUR = 120;  

console.log('bim', bim); //바뀜
console.log('HOUR', HOUR); //오류발생


변수 할당(대입)

  1. = 할당의 의미
    • var a = 10; => 숫자10을 변수 a에 값을 할당하다.
    • 언제든지 값은 변할수 있다.
    • a = 7 + 2; a의 값은 9로 변경됨


변수 정의 패턴

  1. 한개의 var 키워드에 변수선언

    var x, y, z; 
    // 값을 할당하지 않고 선언만 하는 경우 
    // undefined 원시 데이터 유형 값으로 변수에 할당(복제)된다.
    
  2. var 키워드를 변수 이름마다 사용해서 선언 : 일반적으로 많이 쓰는 방법

    var x;
    var y;
    var z;
    
    // 선언 이후에 값(Data)을 변수에 할당한다.
    x = '바버';
    y = 999;
    z = null;
    
    
  3. 변수 선언과 동시에 값을 할당 : 일반적으로 많이 쓰는 방법

    var x = 10;
    var y = 50;
    
  4. var singleton pattern : var 키워드를 한번만 사용하는 코딩 패턴(방법)

    var a=1, b=2, c=9;
    
    // 아래와 같이 개행 가능
    var a=1,
        b=2,
        c=9;


변수명 작성 규칙

  1. 이름 앞에 숫자 No 하지만 뒤는 Ok

    • => var 999qkqj; Error
    • => var qkqj999; Ok
  2. 이름 사이의 공백 No 공백대신 언더바

    • => var my name; Error
    • => var my_name; Ok
  3. 이름 앞에 특수문자는 $, _ 만 가능

    • => var ^^#@_name; Error
    • => var $name; Ok : $가 붙은 변수는 주로 제이쿼리를 담은 변수를 나타냄
  4. 변수명이 모두를 대문자로 사용하지 않는다.

    • => 오류가 발생하는 것은 아니지만 이름이 전부 대문자이면 관례적으로 상수로 인식한다.
    • => var SMART_PHONE; ==> 상수로 인식
    • => 상수선언은 const 이름 = '값'; ==> const STORAGE;
  5. 카멜 케이스(camelCase) 표기법

    • 대문자를 변수 이름에 사용하는 경우는 카멜 케이스 표기법을 따르는 경우가 많다.
    • var smartPhone;

참고 및 주의사항

  • 한국어도 가능하지만 크롬말고 다른 브라우저는 인식 못할수도 있음
  • 예약어 사용 안됨


변수 값의 복사, 참조의 구분

  1. 값 복사 : 데이터가 원시데이터형일 때 복사가 된다.

    • 원시 데이터(Primitive Data Type) 유형 5가지
      • undefined , null , Number , String , Boolean
    // 실행구문 1
    // x에 10을 대입
    x = 10;
    
    // x의 변수값 복사
    y = x;
    
    console.log('x: ',x);  // 10
    console.log('y: ',y);  // 10
    
    // 실행구문 2 (x값 변동, y의 값은?? )
    // x 변수의 상태가 변경 ( === 값이 변경)
    x = 5;
    
    // z에 연산된 값 할당 
    z = x * y -150;
    
    console.log('x: ',x);  // 5
    console.log('y: ',y);  // 10  ==> y값은 변동되지 않음 처음 복사한값 그대로 
    console.log('z: ',z);  // -100
    
    // 실행구문 3  (x값 변동, y값 연산된 값은??, z의 값은???)
    // x 변수의 상태가 변경 ( === 값이 변경)
    x = -15;
    
    // y의 연산결과 : y = -15 + 10
    y = x + 10;
    
    console.log('x: ',x); // -15
    console.log('y: ',y); // -5
    console.log('z: ',z); // -100  
    //==> z의연산의 위치는 변수x,y의 값이 바뀌기전임 그래서 위의 z값과 같음
    
    
    
  2. 참조 : 주소를 가르키고있다 개념으로 자료형 데이터 일때 참조됨

    • 참조형 데이터(Reference Data Type) == 자료형데이터
      • 객체(Object), 함수(Function Object), 배열(Array Object)
  • 변수 값 참조 예제 1
// tea_time 변수에 배열데이터 할당
// == tea_time 변수가 배열테이터 참조
var tea_time = ['cake', 'coffee'];
// food 변수가 tea_time에 할당된 값을 참조.
var food = tea_time;

console.log('tea_time:', tea_time); // ['cake', 'coffee']
console.log('food:', food); // ['cake', 'coffee']

//실행구문 2
tea_time[2] = 'ice-cream';

console.log(tea_time); // ["cake", "coffee", "ice-cream"]
console.log(food); // ["cake", "coffee", "ice-cream"]

// => 참조된값이 바뀌면 변경된다.

var a = 10;
var b = a;
var c = {x: a};
var d = c; // c에 참조된 객체를 d도 참조함.

console.log('a:',a);
console.log('b:',b);
console.log('c:',c);
console.log('d:',d);


//변수 데이터값 변경
a = 100;
b = 200;
c.x = 300;

console.log('a:',a);
console.log('b:',b);
console.log('c.x:',c.x);
console.log('d.x:',d.x); // c에 참조된 객체를 d도 참조하고 있기에 값이 변경됨.

//---------------- 중요한 개념 ----------------------
// 변수c가 참조하고 있는 객체에서 키인 x는 객체가 아님 
// x라는 이름을 가진 변수 라서 데이터 값이 복사됨. 
// 대신 변수d는 변수c의 객체를 참조 하고 있기에 c의 키인 x가 변경되면 변경된 값을 가지고있음


전역변수와 지역변수

전역 : global scope variable

  • 전역(window) 공간에 정의된 변수
var mouse = '매직 마우스';
console.log(1, mouse);

지역 변수 : local scope variable

function localScope() {
  var mouse = '돌핀 마우스';
  console.log(2, mouse);
}
localScope();
console.log(3, mouse);

매개 변수 : parameter

function callMe(who, when, where, how) {
  // 매개변수는 해당 함수의 내부에서 접근이 가능하다.
  // console.log('a', who);
  console.log('who:', who);
  console.log('when:', when);
  console.log('where:', where);
  console.log('how:', how);
}
callMe('boy', 'yesterday', 'school', 'using smartphone');
// console.log('b', who); // Reference Error

멤버 변수

  • 객체가 소유한 멤버
  • 객체란? 속성의 집합
var phone = {
  'name': 'iPhone',
  'version': 7
}


그외

  • CPU

    • cpu는 계산담당(cache는 cpu를 위한 저장공간)
    • ram은 기억담당(비싼 호텔! 저장하는 주소, 방 많이 가지고 있음) : 계산할 값을 저장하고 있음
    • hdd/sdd는 영구적으로 데이터 저장
    • cpu--cache--ram--hdd 순으로 데이터가 이동함
    • gpu 모니터에서 랜더링되는 화면을 연산
    • cpu-직렬처리/ gpu-병렬처리 로 작동방식, 목적이 다름
    • cpu i-5, i-7(쿼드코어) 같은거, 노트북과 데스크탑 cpu는 좀 다름...
    • gpu 는 동시에 여러 코드를 처리 가능.-테슬러 자동차 처럼 여러 센서가 대규모 데이터 주는거 처리할 때 사용하기도 함
    • cpu작동 방식은 잘 모르겠다!! 여러 코드를 여러개의 cpu가 처리하지 못함
    • 32bit os는 ram 4기가 이상 쓸 수 없다, 인식 못함.
  • undefined는 예약어 아님. 변수이름으로 쓸 수 있지만 값이 실제로 담기지는 않음


'Javascript' 카테고리의 다른 글

[자바스크립트] 기본 - basic  (0) 2017.02.28

자바스크립트

기본

  • 자바스크립트 정식 명칭 ECMAScript
  • 자바스크립트 기본문법
    • 대소문자구분
    • 유니코드 기반, 영어 아닌 다른 언어도 코드 안에서 사용 가능
      • 유니코드 - 유사이래 모든!!(고대한글도) 문자를 표현하는게 목표
    • 명령어는 문장을 구성됨 typeof 등
    • 스페이스, 탭, 줄바꿈 문자는 공백(white-space)라 부름
  • <script type="text/javascript">마임타입!</script>
    • 스크립트 코드 위치에 따라 눈에 보이는 페이지 로딩 속도가 달라보임!
    • 스크립트가 위쪽에 있으면 아래 html문서가 로딩되지 않아서 늦게 뜨는것처럼 보임


스크립트 속성

  • type
    • type ="text/javascript" 
    • 생략가능
  • src
    • 외부스크립트 주소
  • charset
    • UTF-8, euc-kr 과 같은 스크립트의 Character Set를 지정
  • async
  • defer

=> async와 defer 속성이 같이 사용될 경우 async가 높은 우선순위를 갖음


<script async src = “js/script.js"></script>


<script defer src = “js/script.js"></script>




주석

  • // 한줄
  • /* */ 여러줄 주석


엄격모드 발동

  • 문법이 엄격함 지키지않으면 오류발생 : 'use strict';
  • 일반 vs 엄격 모드 때의 this가 가르키는것

    // 일반적인 방법
    (function(aa){
       console.log('this는 뭐니',this);
    })(this);
    
    ==> this는 뭐니 ?
    Window {speechSynthesis: SpeechSynthesis, caches: CacheStorage, localStorage: Storage, sessionStorage: Storage, webkitStorageInfo: DeprecatedStorageInfo…}
    
    // 엄격모드 발동
    (function(aa){
    'use strict'
       console.log('this는 뭐니',this);
    })(this);
    
    ==>  this는 뭐니?  undefined
    
    
    (function(aa){
    'use strict'
       console.log('this는 뭐니',this);
       console.log('aa는 뭐니',aa);
    })(this);
    ==> 출력  this는 뭐니 undefined
    ==> 출력   aa는 뭐니 Window {speechSynthesis: SpeechSynthesis, caches: CacheStorage, localStorage: Storage, sessionStorage: Storage, webkitStorageInfo: DeprecatedStorageInfo…}
    undefined
    
    


dot syntax

//자바스립트 문장은 점으로 연결되어 이루어진다.
주어.동사('목적어');
console.log('뭐야');


스크립트 로딩시 주의

  • JS는 통역언어 : 브라우져 엔진이 읽어서 가져오는언어 그래서 느려
  • head나 body 요소 안에 작성
    • head나 body 요소밖에 작성해도 동작은 되지만 웹표준에 어긋남
  • body 요소 안 끝부분에 선언
    • html문서가 다 읽히고 나서 스크립트 읽어서 실행 되어야 모두 동작
    • 상단에 들어가면 html문서가 읽히고 출력은 되어보이지만 실제적으론 스크립트 구문이 먼저 읽힐 당시엔 html문서를 찾을수 없어서 실행이 안됨
    • 만약 무조건 head 안에 작성해야 한다면 불러올 스크립트에 onlode 이벤트 발생 시켜야함 window.onload = function(){};
  • 블러오는 순서가 매우 중요
// 변수만 모아 놓은 파일
<script src="js/var.js"></script>
// 실행문들,, : 이것이 변수파일보다 위로 올라간다면 변수를 읽어오지 못해서 변수를 찾을수 없음
<script src="js/write.js"></script>



자바스크립트 호출 실행 흐름

<!DOCTYPE html>
<html lang="ko-KR">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Comㅌpatible" content="IE=Edge">
    <script>alert('title 위에서 실행');</script> 
    <title>자바스크립트 호출 실행 흐름</title>
    <style type="text/css">
      body{background-color: pink; color: #4C4C4C;}
    </style>
    <script>alert('style 아래에서 실행');</script> 
  </head>
  <body>
    <h1>요소 먼저 읽지만 js구문 만나서 출력하지 않고 js끝나고 화면에 출력</h1>
    <script>alert('body 시작지점에서 실행');</script> 
    <h2>javascript</h2>
    <script>alert('h2 뒤에서 실행');</script> 
    <p>Lorem ipsum dolor sit amet.</p>
    <script>alert('p 뒤에서 실행');</script> 
  </body>
</html>



스크립트 파일 분리

  • HTML:구조, CSS:표현, JS:동작
  • 인라인으로 사용하지 않는다. : 코드더러워짐 유지보수 어려움
<button 
    type="button"
    onclick="document.body.style.background='#EA92FF';"
    style="padding: 1rem; background: #220D44; color: #fff; border: none; border-radius: 5px;"
>
  click
</button>
  • css , script 내부로 분리 : 그래도 코드 더러움
<style>...</style>

<button typr="button" id="target"> GOOD click </button>

<script>
  document.getElementById('target').onclick = function(){
    document.body.style.background="#C6ABFF";
  }
</script> 
  • css, script 외부파일로 모두 분리 : 깔끔!!
<link rel="stylesheet" type="text/css" href="css/marge-style.css">
<button typr="button" id="target"> GOOD click </button>
<script src="js/marge-app.js"></script>
  • marge-app.js 코드
//marge-app.js

//문서 객체를 찾아 변수에 할당
var body = document.body;
var button = document.getElementById('target');

// 수행할 일(기능==function)을 참조하는 변수 선언
var btnClick =  function(){ 
  body.style.background="#C6ABFF";
}

// 기능이 참조된 변수를 실행
button.onclick = btnClick;



Learn later,,,,

  • 바디요소 접근
    • document.body;
  • 아이디 접근
    • document.getElementById('아이디명');



'Javascript' 카테고리의 다른 글

[자바스크립트] 변수 - variables  (0) 2017.03.01

+ Recent posts