2016-06-08 10 views
-1

달러 접두사와 매개 변수 번호 ($ 1 = 첫 번째 매개 변수, $ 2 = 두 번째 매개 변수)를 사용하여 bash 스크립트와 같은 루틴 매개 변수에 액세스하려고합니다. 내 함수 서명은 비어 있어야합니다.bash 스크립트와 같은 액세스 매개 변수

function foo (/* Empty */) { 
    return $1 + $2 + $3; 
} 

foo(2, 2, 4); // => 8 

어떻게하면됩니까? 나는 성공없이 apply 메소드를 사용해 보았다.

foo.apply(null, { $1: 2, $2: 2, $3: 4 }); 
+0

이렇게하면 안됩니다. –

+0

'with '블록을 시도해 볼 수는 있지만 피할 수 있습니다. –

답변

2

생산 코드에서 이것을 사용하지 마십시오 :

Object.defineProperties(window, { 
 
    '$1': { get: function fn() { return fn.caller.arguments[0]; } }, 
 
    '$2': { get: function fn() { return fn.caller.arguments[1]; } }, 
 
    '$3': { get: function fn() { return fn.caller.arguments[2]; } }, 
 
    '$4': { get: function fn() { return fn.caller.arguments[3]; } }, 
 
    '$5': { get: function fn() { return fn.caller.arguments[4]; } } 
 
}); 
 

 
var a = function() { 
 
    console.log($1, $2, $3, $4, $5); 
 
}; 
 

 
a("Hello", "I can't beleave", "this", "actually", "works!");

그래도 "use strict"과 작동합니다.

0

모든 javascript 함수에는 arguments 매개 변수가 숨겨져 있습니다.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments

function foo() { 
    for(var i = 0; i < arguments.length; i++) { 
    this['$'+(i+1)] = arguments[i] 
    } 
    console.log($1, $2); 
} 
foo(1, 'b'); 
+0

bash 스크립트 에서처럼 인수에 액세스하려고합니다. arguments 객체를 사용하지 않습니다. – user123123123

+1

@ user123123123 수 없습니다. –

+0

당신은 분명하지 않습니다. 1 달러는 무엇이되어야합니까? 첫 번째 매개 변수는 함수에 전달됩니까? 또는 스크립트를 실행할 때 명령 줄에서 매개 변수가되기를 원하십니까? node.js를 사용하여 실행한다고 가정합니다. –

0

그럼 떠들썩한 파티 형 변수로 매개 변수를 변환하는 간단하지 않으며 (more)를 사용하여 객체를 요구 - 중 글로벌 window 객체를 사용 - 다음 파라미터 함수 외부 표시, 또는 로컬 사용 매개 변수를 저장하는 객체 - 그러면 100 % bash와 같은 것이 아닙니다.

코드 - window 사용 :

function a() { 
    for (var i = 0; i < arguments.length; i++) { 
    window['$' + (i + 1)] = arguments[i]; 
    } 
    console.log($1); // 12 
} 

a(12, 34, "a"); 
console.log($1); // 12 - visible outside function 
console.log($2); // 34 
console.log($3); // "a" 

코드 - 사용 목적 :

function a() { 
    var vars = {}; 
    for (var i = 0; i < arguments.length; i++) { 
    vars['$' + (i + 1)] = arguments[i]; 
    } 
    console.log(vars.$1); // 12 
    return vars; 
} 

var b = a(12, 34, "a"); 
console.log(b.$1); // 12 
console.log(b.$2); // 34 
console.log(b.$3); // "a" 
+0

그렇습니다. 그러나 유일한 해결책 일 수 있습니다. –

+0

예, 이것은 창 개체로 꽤 똑똑합니다. –