if(predicate&&!predicate(v))
如果传进来的predicate存在,并且pridicate(v)不为true的时候,抛错!
js的参数可以是任何类型,按照你这种用法,应该是传入了一个方法,如:
function predicate(v){
//这里进行比较!
}
!predicate(v) 是检查predicate这个函数传入v参数后的运行结果的相反的值
o是对参数设置的一个对象的引用,name只是一个简单的字符串,arguments[2]应该是在赋值时候检查 因为value是私有属性 所有的对象方法都是围绕它展开的