[javascript] JavaScript에서 여러 값을 반환 하시겠습니까?

JavaScript 에서 두 개의 값을 반환하려고합니다 . 이것이 가능한가?

var newCodes = function() {  
    var dCodes = fg.codecsCodes.rs;
    var dCodes2 = fg.codecsCodes2.rs;
    return dCodes, dCodes2;
};



답변

아니요,하지만 값이 포함 된 배열을 반환 할 수 있습니다.

function getValues() {
    return [getFirstValue(), getSecondValue()];
}

그런 다음 다음과 같이 액세스 할 수 있습니다.

var values = getValues();
var first = values[0];
var second = values[1];

최신 ECMAScript 6 구문 *을 사용하면 반환 값을보다 직관적으로 구성 할 수도 있습니다.

const [first, second] = getValues();

리턴 된 각 값에 “레이블”을 넣으려면 (쉽게 유지하기 위해) 오브젝트를 리턴 할 수 있습니다.

function getValues() {
    return {
        first: getFirstValue(),
        second: getSecondValue(),
    };
}

그리고 그들에게 접근하려면 :

var values = getValues();
var first = values.first;
var second = values.second;

또는 ES6 구문으로 :

const {first, second} = getValues();

* 브라우저 호환성에 대해서는 이 표 를 참조하십시오 . 기본적으로 IE를 제외한 모든 최신 브라우저는이 구문을 지원하지만 빌드시 Babel 과 같은 도구를 사용하여 ES6 코드를 IE 호환 JavaScript로 컴파일 할 수 있습니다 .


답변

“destructuring assignments”를 사용하여 Javascript 1.7 이상에서이를 수행 할 수 있습니다 . 이전 Javascript 버전 (ECMAScript 3 판 또는 5 판)에서는 사용할 수 없습니다.

1 개 이상의 변수에 동시에 할당 할 수 있습니다.

var [x, y] = [1, 2];
x; // 1
y; // 2

// or

[x, y] = (function(){ return [3, 4]; })();
x; // 3
y; // 4

또한 객체 값을 속성 값 속기와 함께 사용하여 객체 의 반환 값 이름을 지정하고 원하는 값을 선택할 수 있습니다.

let {baz, foo} = (function(){ return {foo: 3, bar: 500, baz: 40} })();
baz; // 40
foo; // 3

그리고 ECMAScript가 허용하는 사실에 속지 마십시오 return 1, 2, .... 실제로 일어나는 일은 보이지 않을 수도 있습니다. 리턴 명령문 표현식 – 1, 2, 3– 아무것도하지만 콤마 연산자 (숫자 리터럴인가 1, 2그리고 3결국 마지막 표현식의 값으로 계산하는) 순차 – 3. 그것이 return 1, 2, 3기능적으로 더 이상 아무것도 아닌 이유 입니다 return 3.

return 1, 2, 3;
// becomes
return 2, 3;
// becomes
return 3;


답변

그냥 객체 리터럴을 반환

function newCodes(){
    var dCodes = fg.codecsCodes.rs; // Linked ICDs  
    var dCodes2 = fg.codecsCodes2.rs; //Linked CPTs       
    return {
        dCodes: dCodes,
        dCodes2: dCodes2
    };
}


var result = newCodes();
alert(result.dCodes);
alert(result.dCodes2);


답변

ES6부터는 이것을 할 수 있습니다

let newCodes = function() {
    const dCodes = fg.codecsCodes.rs
    const dCodes2 = fg.codecsCodes2.rs
    return {dCodes, dCodes2}
};

let {dCodes, dCodes2} = newCodes()

반환 표현 {dCodes, dCodes2}입니다 속성 값 속기 이 동일합니다 {dCodes: dCodes, dCodes2: dCodes2}.

마지막 줄에서이 할당을 객체 파괴 할당 이라고 합니다 . 객체의 속성 값을 추출하여 같은 이름의 변수에 할당합니다. 다른 이름의 변수에 반환 값을 할당하려면 다음과 같이하십시오.let {dCodes: x, dCodes2: y} = newCodes()


답변

Ecmascript 6에는 “강제 할당”(kangax가 언급했듯이)이 포함되어 있으므로 Firefox뿐만 아니라 모든 브라우저에서 이름을 가진 배열이나 객체를 만들지 않고도 값의 배열을 캡처 할 수 있습니다.

//so to capture from this function
function myfunction()
{
 var n=0;var s=1;var w=2;var e=3;
 return [n,s,w,e];
}

//instead of having to make a named array or object like this
var IexistJusttoCapture = new Array();
IexistJusttoCapture = myfunction();
north=IexistJusttoCapture[0];
south=IexistJusttoCapture[1];
west=IexistJusttoCapture[2];
east=IexistJusttoCapture[3];

//you'll be able to just do this
[north, south, west, east] = myfunction(); 

이미 Firefox에서 사용해 볼 수 있습니다!


답변

새로 도입 된 (ES6) 구문을 언급 할 또 다른 가치는 할당을 파괴하는 것 외에도 객체 생성 속기를 사용한다는 것입니다.

function fun1() {
  var x = 'a';
  var y = 'b';
  return { x, y, z: 'c' };
  // literally means { x: x, y: y, z: 'c' };
}

var { z, x, y } = fun1(); // order or full presence is not really important
// literally means var r = fun1(), x = r.x, y = r.y, z = r.z;
console.log(x, y, z);

이 구문은 이전 브라우저에서 babel 또는 다른 js polyfiller로 채워질 수 있지만 다행히도 최신 버전의 Chrome 및 Firefox에서 기본적으로 작동합니다.

그러나 새로운 객체를 만들 때 메모리 할당 (및 최종 gc로드)이 여기에 관여하므로 많은 성능을 기대하지 마십시오. 어쨌든 JavaScript는 최적의 것을 개발하기위한 최상의 언어는 아니지만, 필요한 경우 주변 객체 또는 일반적으로 JavaScript, Java 및 다른 언어 간의 일반적인 성능 트릭 인 기술에 결과를 적용하는 것을 고려할 수 있습니다.


답변

가장 좋은 방법은

function a(){
     var d=2;
     var c=3;
     var f=4;
     return {d:d,c:c,f:f}
}

그런 다음 사용

a().f

리턴 4

ES6에서는이 코드를 사용할 수 있습니다

function a(){
      var d=2;
      var c=3;
      var f=4;
      return {d,c,f}
}