像 bash 脚本一样访问参数

Access parameters like a bash script

我想像在 bash 脚本中一样访问我的例程参数,通过使用美元前缀和参数编号($1 = 第一个参数,$2 = 第二个参数),我的函数签名必须为空。

function foo (/* Empty */) {
    return  +  + ;
}

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

我该怎么做?我尝试使用 apply 方法但没有成功。

foo.apply(null, { : 2, : 2, : 4 });

所有 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(, );
}
foo(1, 'b');

嗯,将参数转换为 bash 类变量并不是那么简单,需要使用对象 (more) - 要么使用全局 window 对象 - 然后参数在函数,或使用本地对象存储参数 - 那么它不是 100% bash-like.

代码 - 使用 window:

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

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

代码 - 使用对象:

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

var b = a(12, 34, "a");
console.log(b.); // 12
console.log(b.); // 34
console.log(b.); // "a"

请不要在生产代码中使用它:

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

var a = function() {
  console.log(, , , , );
};

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

虽然无法与 "use strict" 一起使用。