Search

반응형

'자바스크립트'에 해당되는 글 38건

  1. 2022.04.25 [초보코딩]자바스크립트 사용하기 편. -Javascript
  2. 2022.04.10 [왕초보]자바스크립트 Function.prototype.bind() 함수 구문 이해하기. bind().
반응형

안녕하세요. 신기한 연구소입니다.

자바스크립트는 보통 HTML 내에서 사용하는데요.

그렇다면 HTML 내에서 어떻게 사용할까요?

바로 <script> 요소를 사용하는 것입니다.

공식 HTML 명세에 추가된 <script>는 여섯 가지 속성이 있는데

같이 살펴보겠습니다.

 

src

HTML 내에 직접 스크립트를 작성하지 않고. js 별도의 스크립트 파일로 저장한 뒤 그 경로를 지정할 때 사용합니다.

type

language 속성을 지정할 때 사용하는데 보통 text/javascript를 사용합니다.

하지만 생략해도 되는데 이유는 기본값이 바로 text/javascript이기 때문입니다.

 

async 

외부 스크립트 파일을 불려올 때 유용합니다. 하지만 자원 내려받기, 다른 스크립트 불러오기 등 다른 작업을 방해하지 않는 선에서 즉시 스크립트를 내려받도록 합니다. 즉 파싱 중에도 스크립트를 실행하게 됩니다.

 

defer

src를 사용해서 외부 스크립트 파일을 불러올 때 유효하고 브라우저가 페이지를 파싱하고 나면 실행하게 합니다.

 

charset 

코드의 문자셋을 지정하지만 브라우저는 보통 무시하므로 사용하지 않아도 됩니다.

 

language

 대부분 브라우저에서 무시하기 때문에 사용하지 않습니다.

 

자바스크립트는 HTML 문서 내에서 사용하거나 외부 js 파일을 불러와서 사용하는 두가지 방법이 있습니다.

 

내부 HTML에서 사용하는 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<!DOCTYPE html>
<html>
    <head>
        <script>
            var a = 1//전역 지역의 전역변수
 
            function funcA() {  //전역 지역의 전역 함수
                a = 3;
                console.log(a);
                return 2;
            }
            
            function funcB() {  //전역 지역의 전역 함수
                var b = 4;    
                console.log(funcA());
                console.log(b);
                console.log(a);
                return 2;
            }
        </script>
    </head>
    <body>
       Hello~
    </body>
</html>
cs

 

외부 js 파일 불러오는 예시

1
2
3
4
5
6
7
8
9
10
<!DOCTYPE html>
<html>
    <head>
        <script src="./jsbook/logi.js"></script>
 
    </head>
    <body>
       Hello~
    </body>
</html>
cs

 

js 파일을 작성할 때 주의점은 js파일 내에서는 <script></script> 를 넣으면 안 됩니다.

오직 HTML 파일에서만 <script> 요소를 사용해야 합니다.

이 src는 막강한 기능이 있는데 바로 같은 서버에 위치한 js 파일뿐만 아니라

다른 도메인에 있는 js 파일도 가져올 수 있다는 겁니다.

<script src=’http://www.aaa.com/abc/sample.js’></script>

하지만 외부에 있기에 신뢰할 수 있는 경우에만 사용해야 합니다.

스크립트 순서대로 해석을 한다는 점을 꼭 기억해야 합니다.

반응형
반응형

안녕하세요. 신기한 연구소입니다.

이번 포스팅은 bind() 함수에 대해 쉽게 정리해보겠습니다.

이번 포스팅은 Function.prototype.bind()에 대해 살펴보겠습니다.

그럼 먼저 bind() 구문에 대해 알아보겠습니다.

구문

func.bind(thisArg[, arg1[, arg2[, ...]]])

정의

이 함수( bind )가 호출되는 시점에 새로운 함수가 만들어집니다.

이 함수를 사용하면 객체가 다른 객체의 메서드를 빌려서 사용할 수 있습니다.

현재 객체에는 없지만 다른 객체에 필요한 메서드가 있는 경우

중복해서 선언할 필요 없이 bind()해서 새로운 함수를 만들어 사용하면 됩니다.

thisArg 뒤의 인수들은 bind 한 메서드들에게 전달한 인자 값을 지정할 수 있는 겁니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
  this.a = 55;
  const obj = {
    a:42,
    getData:function() {
      return this.a;
    }
  };
  console.log(obj.getData());
  var aaa = obj.getData;
  console.log(aaa());
  var bbb = aaa.bind(obj);
  console.log(bbb());
cs

위 예제를 보겠습니다.

먼저 전역에 a = 55로 값을 할당했고 obj 객체를 선언하면서

내부 변수 a에 42를 할당했습니다.

obj 객체에 getData 함수(메서드)를 선언했고

this.a 로 값을 return 하도록 구현했습니다.

결과가 흥미로운데요.

첫 번째 obj.getData()를 실행하면 객체의 메서드인 getData를 실행하면서

this.a인 내부 변수인 a를 찾게 됩니다.

결과는 obj 변수인 42를 출력합니다.

두 번째 aaa를 obj의 getData (obj.getData)로 obj의 내부 메서드 그 자체를 할당했습니다.

이제 obj 객체를 벗어난 순수한 getData만 보면 되겠습니다.

aaa(); 를 실행하면 obj 와는 전혀 관계없이 getData만 전역으로 실행됩니다.

그러므로 전역 변수인 a를 찾게 되고 55를 출력하게 됩니다.

만약 전역의 this.a = 55;를 주석처리한다면 undefined가 출력될 것입니다.

하지만 우리는 obj의 메서드인 getData를 객체 내부의 메서드로 실행하고 싶은 경우가 있습니다.

이런 경우 바로 객체의 메서드로 빌려 쓰는 bind() 메서드를 사용하면 원하는 기능으로 가능하게 됩니다.

그래서 bbb를 할당하는데 aaa(obj.getData)에 객체 obj를 바인딩(bind)하는 식으로 표현하면 됩니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
const name = {
  fName : "hoon",
  lName : "kim",
  fullName : function () {
    console.log(this.fName + ' ' + this.lName);
  }
};
 
//name.fullName();
let a = name.fullName.bind(name);
//console.log(setTimeout(name.fullName, 1000));
console.log(setTimeout(a, 1000));
cs

이번 예제는 setTimeout을 사용할 때 bind 함수를 사용하는 방법에 대해 구현해봤습니다.

먼저 9번 라인을 보면 객체 name.fullName()을 실행하면 해당 객체의 메서드가 정상 실행됩니다.

하지만 11번 라인의 setTimeourt 내부에서 name.fullName을 실행하면 this 변수가 마찬가지로

전역을 바라보게 되어 undefined가 됩니다.

이럴 경우는 10번 라인처럼 bind를 사용해서 연결을 합니다.

그리고 바인드 된 a를 setTimeout에 사용하면 정상적으로 잘 출력됨을 확인할 수 있습니다.

이렇게 다른 객체 또는 전역에 사용 중인 함수 또는 메서드와 연결해서 재사용하기 위해서

bind()을 사용하는 방법에 대해 살펴봤습니다.

처음 이 함수를 접할 때 이해가 잘 안 되었다면 이 포스팅을 참고해서 쉽게 이해했으면 합니다.

반응형