这个是javascript编程精解中的 参数传递一章中的内容:
function noisy(f){
return function(arg){
console.log("calling with",arg);
var val = f(arg);
console.log("calling with",arg,"- got", val);
return val;
};
}
如果函数f接受多个参数,那么该函数只能接收第一个参数,我们可以为内部函数添加多个参数(arg1,arg2等),然后将这些参数传递给f,但问题在于noisy函数并不知道f函数需要多少参数。因为noisy函数只能传递固定数量的参数给f,因此也不能获取函数的argument.length,函数f没有办法知道调用者传递给noisy的参数个数
其中,粗体部分我有一些不理解
1.noisy函数不知道f需要多少参数。 - f函数是自己写的吧。。那为什么不知道f需要多少参数,假设f函数是function(num1,num2){},那不就是2个参数吗..
2.因此也不能获取函数的argument.length。。这是为什么呢?
题外话:这本书是大学的时候发的,题主是一步一步看着书来的,但是书中确实讲的不是很详细,不太适合初学者,关于闭包几句话就过去了。。。感觉有些吃力。可否问一下老铁们有没有适合初学者的书推荐呢?如果空余话也可写几句学习js的大致方向。感激不尽!
如果函数f接受多个参数,那么该函数只能接收第一个参数,我们可以为内部函数添加多个参数(arg1,arg2等),然后将这些参数传递给f,但问题在于noisy函数并不知道f函数需要多少参数。因为noisy函数只能传递固定数量的参数给f,因此也不能获取函数的argument.length,函数f没有办法知道调用者传递给noisy的参数个数
逐句解析:
如果函数f接受多个参数,那么该函数只能接收第一个参数================因为返回函数中只有一个参数arg;
我们可以为内部函数添加多个参数(arg1,arg2等),然后将这些参数传递给f===========内部函数即返回函数(可见示例);
noisy函数并不知道f函数需要多少参数。因为noisy函数(这里指的应该是它的返回函数,因为f的参数是从返回函数的参数拿的)只能传递固定数量的参数给f =============就是说f函数所接受的参数只能由noisy()返回函数的参数决定,arg对应arg嘛;
也不能获取函数的argument.length,函数f没有办法知道调用者传递给noisy的参数个数===================确实无法获取调用者传递给noisy的参数个数,具体理解可以看下面:
借楼上例子:
运行 noisy(sample)(1,2), f = sample 函数,这里noisy()函数有一个参数sample,只在返回函数里用到了,这样子看 (noisy(sample))(1, 2) , 用foo = (noisy(sample)),
也就是
如果:
上例和下例结果一样:
这书确实看着不明白,还是重在理解会用就好 不用管它