어제의 나보다 성장한 오늘의 나

[자바스크립트] 함수 리턴 본문

공부/JavaScript && jquery

[자바스크립트] 함수 리턴

NineOne 2021. 4. 16. 00:35

자바스크립트 함수는 항상 리턴 값을 반환한다.

특히, return 문을 사용하지 않았더라도 다음의 규칙으로 항상 리턴값을 전달하게 된다.

1. 일반 함수나 메서드는 리턴 값을 지정하지 않은 경우, undefined 값이 리턴

        var noReturnFunc = function(){
            console.log('This function has no return statement');
        };
        
        var result = noReturnFunc();
        // return문이 없는 함수의 경우, 이 함수를 호출할 떄 undefined 값이 리턴된다.
        console.log(result); // undefined

 

2. 생성자 함수에서 리턴값을 지정하지 않을 경우, 생성된 객체가 리턴

  • this로 바인딩된 새로 생성된 객체가 리턴된다.
  • 때문에 생성자 함수에서는 일반적으로 리턴 값을 지정하지 않다.

만약? 다음 코드와 같이 생성자 함수에서 this로 바인딩되는 생성된 객체가 아닌 다른 객체를 리턴한다면? 어떻게 될까

	function Person(name,age,gender){
            this.name=name;
            this.age=age;
            this.gender=gender;
            
            return {
                name:'bar',
                age:20,
                gender:'woman'
            };
        };
        
        // 객체 리터럴 방식의 특정 객체로 지정한 경우 new 연산자로 Person() 생성자 함수를 호출해서 
        // 새로운 객체를 생성하더라도 리턴값에서 명시적으로 넘긴 객체나 배열이 리턴
        var foo = new Person('foo',30,'man');
        console.dir(foo);

  • 생성자 함수의 리턴 값을 새로 생성한 객체가 아니라, 객체 리터럴 방식의 특정 객체로 지정한 경우 new 연산자로 Person() 생성자 함수를 호출해서 새로운 객체를 생성하더라도! 리턴 값에서 명시적으로 넘긴 객체나 배열이 리턴된다.
  • 아래는 리턴을 없앤 경우 this로 바인딩된 새로 생성된 객체가 리턴.

 

 

출처

인사이드 자바스크립트(송형주, 고현준 지음) - 한빛미디어

Comments