javascript - jQuery each 方法第三个参数args 如何解释?
问题描述
空闲的时候看看jq源码,发现each方法、map方法、makeArray都申明了:仅限于内部使用(// arg is for internal usage only),查阅了大量资料都没找到答案,就连jquery的api都只给出了前两个参数的解释,难道是调试用的?那怎么用呢?
源代码// args is for internal usage only each: function( obj, callback, args ) {var value, i = 0, length = obj.length, isArray = isArraylike( obj );if ( args ) { if ( isArray ) {for ( ; i < length; i++ ) { value = callback.apply( obj[ i ], args ); if ( value === false ) {break; }} } else {for ( i in obj ) { value = callback.apply( obj[ i ], args ); if ( value === false ) {break; }} }// A special, fast, case for the most common use of each} else { if ( isArray ) {for ( ; i < length; i++ ) { value = callback.call( obj[ i ], i, obj[ i ] ); if ( value === false ) {break; }} } else {for ( i in obj ) { value = callback.call( obj[ i ], i, obj[ i ] ); if ( value === false ) {break; }} }}return obj; }
经过大量测试,我发现第三个参数还有限制,不能传的类型有:数字,字符串,json等;只能传数组;别的类型我就没在一一测试了在传入数组的时候,callback必须用和args数组中长度一样多的参数来一一接收args数组中的值,如果数组中有三个值,callback只有一个形参,那么这个形参只能接收到args[0]的值。而且我们可以通过arguments来打印args中的所以传过来的值(都是按照顺序全部传过来了的),其中一个测试代码:
// 首先each我传入了三个参数// 通过这种方式,我取到了a,b,c 的三个值分别为’wo’, ’ai’, ’ni’// 多次尝试,我发现args传过来的三个参数是按照顺序排列好的,// 如果只有一个参数那么,我们就只能取到’wo’,// 当var arr = [5, 7, 5];$.each( arr, function(a, b, c){console.log(a); // ’wo’console.log(b); // ’ai’console.log(c); // ’ni’console.log(arguments); //['wo', 'ai', 'ni', callee: function, Symbol(Symbol.iterator): function]console.log(this) // 回调中的所有参数会根据each第一个参数的长度进行多次打印,所以每次打印的this都指向每一次的arr的值 }, [’wo’, ’ai’, ’ni’])参考
我发现在segmentfault 之前也有人问过这个问题,可惜没有人给出答案/q/10...
问题解答
回答1:谢谢大家,问题解决了,我知道为什么了
相关文章:
1. 使用 CSS3 的 Media Query 浏览器会加载其他不同分辨率的 css 文件么2. python3.x - python多线程如何修改数据?3. java - 接口中的成员变量怎么不是常量了?4. java enum 变量不能再case里面重复定义?5. node.js - 我是一个做前端的,求教如何学习vue,node等js引擎?6. javascript - node中为中间层如何解决跨域问题7. javascript - 使用vue-cli有个报错ERR_INCOMPLETE_CHUNKED_ENCODING8. mysql连表排序9. javascript - 求助这种功能有什么好点的插件?10. css3中的 :hover只能应用于a标签不能用于其它标签吗(比如div或li之类的标签)

网公网安备