문제

에서 알 수있는 바와 같이 Mozilla changlog JavaScript1.7 추가한 선언 및 할당합니다.슬프게도 나는 매우 좋아하지 않는 구문(쓰기와 b 의 두 번?):

var a, b;  
[a, b] = f();

이런 것이었다 더 많이:

var [a, b] = f();

는 여전히 하위 호환성을 유지합니다.Python 같은 선언 및되지 않을 것 하위 호환성을 유지합니다.

어쨌든 최고의 솔루션을 위한 JavaScript1.5 되었다는으로 올 수 있다:

function assign(array, map) {
    var o = Object();
    var i = 0;
    $.each(map, function(e, _) {
        o[e] = array[i++];
    });
    return o;
}

처럼 작동:

var array = [1,2];
var _ = assign[array, { var1: null, var2: null });
_.var1; // prints 1
_.var2; // prints 2

그러나 이것이 정말로 안됐기 때문에 아무 의미가 없습니다.그것은 빈 껍질을 저장하는 이름입니다.그러나 슬프게도 그것은 필요하기 때문에 JavaScript 없는 포인터입니다.에 할당할 수 있습니다 기본값이 없는 경우에는 값이 일치되지 않습니다.또한 이 솔루션을 시도하지 않는 슬라이스 배열입니다.그래서 당신은 뭔가 할 수 있습니아 {first: 0, rest: 0}.그러나 쉽게 수 있는 경우,원하는 동작입니다.

무엇이 더 나은 솔루션인가?

도움이 되었습니까?

해결책

첫째, var [a, b] = f() 작 JavaScript1.7 다!

두번째,당신이 원활하게 할 수 있습으로 구문을 사용법 약간with():

var array = [1,2];
with (assign(array, { var1: null, var2: null }))
{
   var1; // == 1
   var2; // == 2
}

물론,이를 허용하지 않고 당신 값을 수정하려면 기존의 변수,그래서 이럴것은 많은 JavaScript1.7 기능입니다.코드에서 쓰 지금, 에,나는 단지 개체를 반환하고 직접 참조 자신의 회원 내가 기다릴 것이다 1.7 기능을 더 널리 사용할 수 있습니다.

다른 팁

당신이 필요로 하지 않는 더미"_"변수입니다.할 수 있습을 직접 만들은"글로벌"변수를 사용하여 윈도우 객체 범위:

window["foo"] = "bar";
alert(foo); // Gives "bar"

여기에 몇 가지 더 많은 포인트:

  • 나는 않을 것 이름이 기능 "할당"이기 때문에 너무 일반 는 용어입니다.
  • 을 더 가깝게 닮 JS 1.7 구문에서만 만날 수 있는 기능을 대상으로 첫 번째 인수하고 소스로 두 번째 인수로 합니다.
  • 개체를 사용하여 문자 전달 대상 변수는 멋진 그러나 혼동 될 수 있습니다 JS1.7 선언 및 대상이 실제로는 객체지 않습니다.내가 선호하는 사용 쉼표로 구분된 목록의 변수 이름에는 문자열을 사용합니다.

여기에 나온:

function destructure(dest, src) {  
    dest = dest.split(",");  

    for (var i = 0; i < src.length; i++) {  
        window[dest[i]] = src[i];  
    }  
}  

var arr = [42, 66];  

destructure("var1,var2", arr); 

alert(var1); // Gives 42
alert(var2); // Gives 66

여기에 무엇을 했는지에 PHPstorm10:

파일->설정->언어&프레임워크->...

...설정 자바 스크립트 언어 버전을 예:JavaScript1.8.5...

->클릭 적용됩니다.

표준 JavaScript 우리가 얻는 데 사용하는 모든 종류의 추함,에뮬레이션 및 선언 및 할당을 사용하여 중간변수가 너무 나쁘지 않다:

function divMod1(a, b) {
    return [ Math.floor(a / b), a % b ];
}

var _ = divMod1(11, 3);
var div = _[0];
var mod = _[1];
alert("(1) div=" + div + ", mod=" + mod );

그러나 내가 생각하면 다음과 같은 패턴이 더 idomatic:

function divMod2(a, b, callback) {
    callback(Math.floor(a / b), a % b);
}

divMod2(11, 3, function(div, mod) {
    alert("(2) div=" + div + ", mod=" + mod );
});

참고는 반환하는 대신 두 가지 결과 배열로,우리는 통과으로 그들을 인수하 콜백 함수입니다.

(참조 코드에서 실행 http://jsfiddle.net/vVQE3/ )

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top