我在十分钟内重新阅读了 Spencer Tipping 的优秀Javascript,我一生都无法弄清楚这个使用惰性作用域创建语法宏的示例中发生了什么:
var f = function () {return $0 + $1};
var g = eval (f.toString ().replace (/\$(\d+)/g,
function (_, digits) {return 'arguments[' + digits + ']'}));
g(5,6); // => 11 (except on IE)
尤其是,
- $0 和 $1 正在被函数定义所取代——如何评估该函数?(大概是通过 eval(),但我没有看到这个)。
- 函数中单个下划线参数的目的是什么——如果我把它拿出来,代码就不再起作用了。大概它只是一个占位符,但为什么需要它呢?