ELOQUENT 자바스크립트 : 3장

이 블로그에서는 Eloquent JavaScript라는 책의 3장에서 배운 내용을 다룰 것입니다.

목차



  • Chapter 3
  • Basic understanding of Functions

  • Scopes
  • 화살표 기능
  • 콜 스택
  • 선택적 인수
  • 폐쇄
  • 재귀



  • 3 장

    기능의 기본 이해

    Functions play a crucial role in programming. Advantages :

    • Larger programs can be structured using functions.
    • Names can be associated with subprograms.
    • Different subprograms to perform different to execute different parts of code.
    • Reduced repetition.

    To begin with, functions are declared using a function keyword.
    They may or may not take a parameter depending on the type of calculations they are going to be used for. The body of a function starts and ends with parentheses. Some functions have a return statement, some don't.

    const square = function(x) {  //function declaration
    return x * x;
    };
    
    console.log(square(12));
    
    //Result → 144
    
    const createVoice = function() {
    console.log("Hahahahaha!");
    };
    
    
    createVoice();
    //Result → Hahahahaha!
    
    
    

    범위

    In JavaScript there are two types of scope:

    • Local scope -> These are the variables declared within a JavaScript function. Local variables have Function scope i.e they can only be accessed from within the function.
    function myFunction() {
      var carName = "Volvo";
    }
    
    • Global scope -> These are the variables declared outside a function. A global variable has global scope i.e all scripts and functions on a web page can access it.
    var carName = "Volvo";
    function myFunction() {
    }
    

    Variables created without a declaration keyword (var, let, or const) are always global, even if they are created inside a function.

    JavaScript can have nested scope as well. Blocks and functions
    can be created inside other blocks and functions, producing multiple degrees of locality. All functions have access to the global scope. Nested functions have access to the scope "above" them.

    const hummus = function(factor) {
    const ingredient = function(amount, unit, name) {
    let ingredientAmount = amount * factor;
    if (ingredientAmount > 1) {
    unit += "s";
    }
    console.log(`${ingredientAmount} ${unit} ${name}`);
    };
    ingredient(1, "can", "chickpeas");
    ingredient(0.25, "cup", "tahini");
    ingredient(0.25, "cup", "lemon juice");
    ingredient(1, "clove", "garlic");
    ingredient(2, "tablespoon", "olive oil");
    ingredient(0.5, "teaspoon", "cumin");
    };
    
    
    //The code inside the ingredient function can see the factor binding 
    from the outer function. But its local bindings, such as unit 
    or ingredientAmount, are not visible in the 
    outer function.
    
    

    In JS, the order of function declaration and function call does not matter. Function declarations are not part of the regular top-to-bottom flow of control. They are conceptually moved to the top of their scope and can be used by all the code in that scope.

    console.log("The future says:", future());
    function future() {
    return "You'll never have flying cars";
    }
    
    
    // result -> The future says you'll Never have flying cars
    

    화살표 함수

    화살표 함수는 JS 함수를 작성하는 또 다른 방법입니다. function 키워드를 사용하는 대신 화살표를 사용하여 함수 본문 다음에 오는 함수를 나타냅니다.

    var squareNumber = (x) => {
    return x * x ;
    }
    
    (squareNumber(5));   //function call
    
    //result -> 25
    
    


    ** 간단히 말해서 이 입력(파라미터)은 이 결과(본문)를 제공합니다.**


    콜 스택

    컴퓨터가 함수 호출을 만나면 해당 함수로 이동하여 구현합니다. 구현 후 컴퓨터는 함수가 호출된 라인으로 돌아가서 다음 코드 라인을 구현합니다.

    컴퓨터는 다시 실행을 계속해야 했던 컨텍스트를 저장해야 합니다. 컴퓨터가 이 컨텍스트를 저장하는 위치는 호출 스택입니다. 함수가 호출될 때마다 현재 컨텍스트가 이 스택의 맨 위에 저장됩니다. 함수가 반환되면 스택에서 최상위 컨텍스트를 제거하고 해당 컨텍스트를 사용하여 실행을 계속합니다.


    선택적 인수

    매개변수가 비교적 적은 함수에 더 많은 인수를 전달할 수 있습니다. JavaScript는 추가 인수를 무시합니다. 반대 상황에서 할당되지 않은 매개변수에는 undefined 값이 할당됩니다.

    function square(x) { return x * x; }
    console.log(square(4, true, "hedgehog"));
    
    
    //Result → 16
    




    폐쇄

    클로저는 상위 함수가 닫힌 후에도 상위 범위에 액세스할 수 있는 함수입니다.

    function makeFunc() {
      var name = 'Mozilla';
      function displayName() {
        alert(name);
      }
      return displayName;
    }
    
    var myFunc = makeFunc();
    myFunc();
    
    


    이 예에서 바인딩 'myFunc'는 makeFunc가 호출될 때 생성되는 displayName 함수의 인스턴스에 대한 참조입니다. displayName 의 인스턴스는 어휘 환경에 대한 참조를 유지합니다( 어휘 범위 지정은 해당 변수를 사용할 수 있는 위치를 결정하기 위해 소스 코드 내에서 변수가 선언된 위치를 사용합니다. 중첩 함수는 외부 범위에서 선언된 변수에 액세스할 수 있습니다.) 변수 이름이 존재합니다. 이러한 이유로 myFunc가 호출되면 변수 이름을 계속 사용할 수 있고 "Mozilla"가 경고로 전달됩니다.

    자세한 내용은 this link 참조


    재귀

    재귀는 단순히 어떤 경계 조건이 발생하지 않는 한 함수가 반복적으로 자신을 호출하는 상황을 나타냅니다. JavaScript 구현에서는 루핑 버전보다 약 3배 느립니다. 을 통해 실행
    단순 루프는 일반적으로 함수를 여러 번 호출하는 것보다 저렴합니다.

    function Factorial(n) { 
                if (n === 0) {  
                    return 1;  
                } 
                else {  
                    return n * Factorial( n - 1 );  
                } 
            } 
    





    읽어주셔서 감사합니다!😃
    모든 피드백을 환영합니다 🙆‍♀️

    다음에서 나와 연결:

  • Github
  • 좋은 웹페이지 즐겨찾기