我正在学习js / jquery并正在进行this练习,按字母顺序排序选择选项。这是他们给出的解决方案:
<div id="target">
<select>
<option val="a">aaa</option>
<option val="c">ccc</option>
<option val="d">ddd</option>
<option val="b">bbb</option>
</select>
</div>
<script>
var options = {};
$('#target option').each(function(i){
var option = $(this);
options[option.text()] = option;
});
var keys = Object.keys(options).sort();
var select = $('#target select').empty();
$.each(keys, function(i, key){
select.append(options[key]);
});
</script>
i
的回调函数中的$.each
参数是否与i
中的$('#target option').each(function(i)
参数相关?
如果是这样,为什么从$('#target option').each(function(i)
删除参数不会破坏任何内容?
在i
中执行的$.each(keys, function(i, key)
参数是什么?我只看到函数中使用的键。从此处删除i
会导致程序中断。
答案 0 :(得分:0)
不,它们是分开的,就像name
这里是分开的一样:
function sayHi(name) {
alert("Hi, " + name);
}
function openWindow(url, name) {
window.open(url, name);
}
它们是单独的函数,每个函数只在自己的范围内定义参数。
删除i
不会破坏任何内容,因为它从未使用过。 JavaScript不会检查您传递的参数数量。如果传递的函数超过函数接受的范围,则会忽略其他内容;如果你传递的更少,那么缺失的那些将被赋予值undefined
。
$.each
回调中的第一个参数将接收项目的索引(或键)(0,1,2,...);第二,价值。 (这有点令人困惑,因为这里的值被称为&#34;键&#34;。)如果删除第一个参数,第二个参数将成为第一个参数,您的keys
变量现在将获得值0 ,1,2 ......之前已经流入i
。
答案 1 :(得分:0)
i指的是.each调用的当前迭代。当var被定义为函数的参数时......它只存在于该函数的范围内。 i是可选的,只有你想知道你在哪个迭代时才需要在那里。