simpleURL()위의 매서드는 다음과 같이 사용할 수 있습니다. map의 각 반복에서 익명함수가 동일한 프로토콜 문자열 http와 사이트 도메인 문자열 siteDomain 즉 처음 두인자는 매번 반복됩니다. 때문에 bind를 사용해 다음과 같이 정의할 수 있습니다.
반복 가능한 객체를 다루기 위해 사용되는 iterator(반복자) 입니다. iterator는 일련의 값을 순차적으로 반환할 수 있는 객체입니다. 이 객체는 next() 메소드를 가지며, 각 호출마다 값을 가진 객체를 반환합니다. 반환되는 객체는 {value, done
arguments 객체가 배열과 비슷해 보일수 있으나 배열처럼 동작하지 않는다. 예를 들어 shift() 라는 함수가 있는데, 이 메서드는 배열의 첫번째 요소를 젝하고 뒤이은 모든 요소들을 하나씩 이동시킨다. arguments에서는 이 shift() 를 사용할 수 없다
javascript 함수 내에서 사용할 수 있는 특별한 객체, 함수가 호출될 때 전달된 모든 인자들을 포함하고 있다. 다음과 같은 속성을 사용할 수 있다. length: arguments 객체에 전달된 인자들의 개수callee : 현재 실행중인 함수에 대한 참조 반환i
자바스크립트의 함수 객체 메서드로, 다른 객체의 컨텍스트에서 함수를 호출하는 방법이다.function : apply() 를 호출하는 함수 객체thisArg : 함수 내에서 this의 값으로 사용됨argsArray : 함수를 호출할 때 전달할 인자들의 배열두 메서드 모두
call() 메서드는 함수를 호출하는 방법 중 하나로, 특정 객체에서 함수를 호출하면서 this 값을 설정할 수 있다. call() 메서드는 함수와 함께 사용되며, 함수의 첫번째 인자로 객체를 받는다. 이렇게 하므로써 함수 내부에 this를 지정된 객체로 설정할 수 있
함수를 인자로 받거나 함수를 반환하는 함수콜백 함수 : 다른 함수의 인자로 전달되어 특정 동작이나 로직을 수행하는 함수함수 커링(Curring) : 여러개의 인자를 받는 함수를 인자 하나만 받는 함수의체인으로 바꾸는것함수 합성(Composition) : 두 개 이상의
객체지향 프로그래밍에 익숙하다면 함수, 메서드, 클래스 생성자 이렇게 세 개의 요소로 생각하기 쉽다. 하지만 자바스크립트에서는 function을 사용하는 서로다른 패턴일 뿐이다. 📌 일급 객체자바스크립트에서 함수는 일급 객체이다. 다른 객체와 마찬가지로 함수가 값으
eval() 함수 안에 변수를 넣으면 변수 안의 값을 반환한다.문자열을 넣어도 그대로 반환한다. eval함수는 단순한 함수가 아니다. 대부분의 함수에는 자신이 선언된 스코프에 점근할 수 있고, 그 이외에는 접근할 수 없지만 eval은 자신이 호출된 시점의 전체 스코프에
eval() 함수는 전달된 문자열을 JavaScript 코드로 해석하고 실행한다.보안상의 이슈를 일으킬 수 있다. (인젝션 이슈)코드의 가독성과 유지보수성을 저하시킬 수 있다.이처럼 eval 함수는 유연하고 강력한 도구다. 때문에 제대로 이해해 두는 것이 좋다. eva
자바스크립트는 지역 블록안에 함수를 선언하는 표준이 없다. 다음 함수의 맨 윗부부에 함수 선언문을 넣는 방법은 관례적이고 완벽히 정확하다하지만 f를 지역 블록 안으로 이동시키면 코드는 완전히 달라진다. 아마도 \[’local’,global’] 을 반환하고 그다음에 \
이 함수는 선언문이 될 수도있고 기명함수 표현식이 될 수 도 있다. 선언문이 된다면 호이스팅되어 전역으로 사용될 것이다. 함수를 변수 f에 바인딩 한다. 물론 이름을 지정할 필요는 없다. 기명함수 표현식은 익명함수 표현식과 달리 그 이름을 함수 내의 지역변수로 바이딩한
(https://velog.velcdn.com/images/giant_toothpick/post/8b76ec59-715f-469c-8a7c-6003bf46254d/image.png)다음은 버그가 존재하는 코드이다.다음 코드에서 10 이라는 값을 계산할 의도로
자바스크립트는 블록 단위의 스코프를 지원하지 않는다. 변수 정의는 이를 포함한 가장 가까운 선언문이나 블록으로 스코프가 정해지는것이 아니라, 자신을 포함하는 함수에 의해 지정된다. 자바스크립트의 변수는 블록에 의해서가 아니라 함수에 의해서 스코프가 정해지기 때문에 p
클로저는 이를 지원하지 않는 언어를 사용하다 넘어온 프로그래머에 게는 친근하지 않은 개념일 수 있지만 크롤저를 마스터하기 위한 노력은 분명 도움이 될것이다.내부의 make 함수가 바깥에서 선언된, makeSandwich 함수에서 선언된magicIngredient 변수
with란? > javascript의 키워드중 하나로 객체의 속성에 접근할 때 코드를 간결하게 작성할 수 있도록 도와주는 기능이다. > “객체” 는 접근할 객체를 나타내는 표현식이다. with 문 내부에서 객체의 속성에 접근할 때 해당 객체의 이름을 생략하고 바로
자바스크립트의 변수 할당 규칙은 너무 간단해서 실수로 전역변수를 만들기 쉽다. 프로그램에서 바인딩되지 않은 변수를 할당하면, 오류를 발생하는 대신 단순히 새로운 전역 변수를 만들고, 이 변수를 새로운 전역 변수에 할당한다. 이는 지역 변수 선언을 깜빡 잊으면 아무말 없
전역 변수는 어떤 선언문도 필요하지 않기 때문에 만들기 쉽고, 프로그램 전체의 모든 코드에서 자동으로 접근 가능하다. 하지만 전역 변수를 정의하는 것은 모든 살마과 공유하는 공통의 네임스페이스를 더럽히고 뜻하기 않게 이름이 충돌할 만한 가능성을 만든다. 가능한 한 모
자바스크립트의 편리함 중 하나는 문장을 종료하는 세미콜론을 생략할 수 있다는 점이다. 그러나 암묵적인 강제 형변환과 비슷하게 세미콜론 삽입에는 함정이있다. 세가지가 있는데 이제부터 알아보자세미콜론은 줄의 마지막 부분, 블록의 마지막 부분, 또는 프로그램의 마지막 부분에
결과적으로 true가 반환된다. 이는 자바스크립트의 강제 형변환 때문이다. “1.0e0” 은 숫자형 1로 파싱된다.true로 반환된 값이 다시 1로 파싱된다.웹 입력 양식에서 값을 읽어와 숫자와 비교하는 작업도 이런 강제 형변환을 사용하곤한다. 이과정에서 강제 형변
javascript는 데이터 형 오류에 놀라울 정도로 관대하다많은 언어들은다음과 같은 표현식을 오류로 처리한다. 이런 자바스크립트도 오류로 보여주는 몇가지 자료형이 있다. 하지만 다른경우 자바스크립트는 오류를 발생시키는 대신, 자동형변환 프로토콜에 따라 예상된 데이터형
javascript 는 5가지 원시 데이터형 값을 가진다. booleannumberstringnullundefined둘은 전혀 다른 타입을 가진다. 즉 내장 연산자를 사용해 비교할 수 없다. javascript는 문자열을 암묵적으로 위와같은 프로토타입 객체로 변경한다.
즉시 실행 함수 표현(IIFE, Immediately Invoked Function Expression) 은 정의되지마자 즉시 실행되는 javascript function을 말한다.()로 둘러싸인 익명함수, 이는 전역 스코프에 불필요한 변수를 추가해서 오염시키는 것을
암묵적인 ‘느슨한 모드(sloppy mode)’ 를 해제하고,명시적인 ‘엄격모드(strict Mode)’ 를 사용하는 방법이다.기존에는 조용히 무시되던 에러들을 throwing합니다. javascritp 엔진의 최적화 작업을 어렵게 만드는 실수를 바로잡습니다. 엄격 모
우리는 eval을 사용하여 문자열로 함수를 표현할 수 있다. 그렇다면 코드를 함수로 표현해야 할까 문자열로 표현해야할까? 만약 이런 의심이 들었다면 함수로 표현하는 것이 좋다. 바로 문자열은 클로저가 아니기 때문이다. 다음과 같은 함수가 있다고 가정해보자문자열로 입력
javascript 함수는 toString 메서드를 통해 그 소스코드를 문자열로 재생산 할 수 있다. 방법1방법2해커들은 다음과 같은 방법을 이용하기도 한다. 하지만 함수의 toString() 메서드에는 몇가지 제약이 있다. 이말이 무슨소리냐 하면 자바스크립트 엔진에
javascript에서 모든 것은 객체이다. 속성과 메서드를 가질 수 있다.키 - 값 쌍으로 이루어진 속성을 포함, 객체의 상태를 나타낸다.{} 또는 new Object() 를 통해 생성할 수 있다.프로토타입은 객체의 부모 역할을 하는 객체이다. 다른 객체들이 상속을
두가지 모두 javascript에서 프로토 타입에 접근하는데 사용되는 메커니즘이다. 하지만 사용 방법과 결과적인 동작에 차이가 있는데 아래 코드를 통해 차이점을 알아보자 예시 1 두 가지 모두 자신이 바라보고있는 프로토타입을 가리킨다. 예시 2\_\_proto\_\_
\_\_proto\_\_ 는 Object.getPrototypeOf가 가지지 않은 추가적인 기능이 있다. 그것은 \_\_ proto \_\_로 객체의 prototype링크를 수정할 수 있다는것이다. 이 기능은 크게 잘못되어 보이지 않는데, 결과적으로는 아주 큰 영향을
User 함수와 같은 생성자를 만들 때, 호출자는 반듣시 new 연산자를 통해 호출해야 한다. 함수의 수신자 객체는 전역 객체가 되버린다. 함수가 undefined를 반환할 뿐만 아니라 전역변수에 name과 age가 이미 존재한다면 수정하게 된다. “use strict
자바스크립트에서 프로토타입을 쓰지 않고 프로그램을 작성하는것은 얼마든지 가능하다. 다음과 같이 작성해도 사실 문제는 없다. 하지만 여러 인스턴스를 만든다면 이야기는 달라진다. toString과 checkPassword 메서드를 프로토타입으로 공유하는 대신, 각 인스턴스
자바스크립트의 객체시스템은 정보를 은닉을 권장하지 않는다! 프로퍼티의 이름은 문자열이고, 프로그램 내에서 그 이름을 통해 어디서라도 접근할 수 있고, 다음과 같은 함수들을 사용할 수 도 있다!for… inObject.keys()Object.getOwnPropertyNa
javascript 객체를 잘못 구현하는 방법 중 하나는 인스턴스마다 저장해야할 데이터를 실수로 프로토타입에 저장하는 것이다.만약 트리 데이터 구조를 구현하는 클래스는 아마도 각 노드마다 자식들의 배열을 포함할 것이다. 근데 자식 배열을 프로토타입에 저장한다면 어떻게