详细注解这段JS

刚在论坛上看了一个帖子 其中这段JS是在令我费解 注解下每句 ps(用汉字)
[code="java"]function createSelect(c){

var _inner = {

"nation" : ['汉族','蒙古族','彝族','侗族','哈萨克族',

'畲族','纳西族','仫佬族','仡佬族','怒族','保安族',

'鄂伦春族','回族','壮族','瑶族','傣族','高山族',

'景颇族','羌族','锡伯族','乌孜别克族','裕固族','赫哲族',

'藏族','布依族','白族','黎族','拉祜族','柯尔克孜族','布朗族',

'阿昌族','俄罗斯族','京族','门巴族','维吾尔族','朝鲜族',

'土家族','傈僳族','水族','土族','撒拉族','普米族','鄂温克族',

'塔塔尔族','珞巴族','苗族','满族','哈尼族','佤族','东乡族',

'达斡尔族','毛南族','塔吉克族','德昂族','独龙族','基诺族'],

"shengxiao" : ['鼠','牛','虎','兔','蛇','蛇','马','羊','猴','鸡','狗','猪'],

"degree" : ['小学','初中','高中','中专','大专','本科','硕士','博士']

}

var _array = c["array"] || _inner[c["type"]];

var _select = document.createElement("select");

for(var i=0; i < _array.length; i++){

_select.options[i] = new Option(_array[i], _array[i]);

_array[i] == c["selected"] && (_select.options[i].selected = true);

}

c["id"] && (_select.id = c["id"]);

c["name"] && (_select.name = c["name"]);

c["onchange"] && (_select.onchange = c["onchange"]);

return _select;

} [/code]

var _inner = {

//定义可选择项的数组

"nation" : ['汉族','蒙古族','彝族','侗族','哈萨克族',

'畲族','纳西族','仫佬族','仡佬族','怒族','保安族',

'鄂伦春族','回族','壮族','瑶族','傣族','高山族',

'景颇族','羌族','锡伯族','乌孜别克族','裕固族','赫哲族',

'藏族','布依族','白族','黎族','拉祜族','柯尔克孜族','布朗族',

'阿昌族','俄罗斯族','京族','门巴族','维吾尔族','朝鲜族',

'土家族','傈僳族','水族','土族','撒拉族','普米族','鄂温克族',

'塔塔尔族','珞巴族','苗族','满族','哈尼族','佤族','东乡族',

'达斡尔族','毛南族','塔吉克族','德昂族','独龙族','基诺族'],

"shengxiao" : ['鼠','牛','虎','兔','蛇','蛇','马','羊','猴','鸡','狗','猪'],

"degree" : ['小学','初中','高中','中专','大专','本科','硕士','博士']

}

//生成选择项的数组,即下拉框的option,这个数组可以是自己传递进来的参数,定义在c['array']里面的。如果没有定义array,那么就用上面自带的3个数组,那传递进来的那个c那个参数,就需要指定type,比如说nation,或者shengxiao

var _array = c["array"] || _inner[c["type"]];

//生成一个下拉框

var _select = document.createElement("select");

//将数组的元素全部添加到下拉框中

for(var i=0; i < _array.length; i++){

_select.options[i] = new Option(_array[i], _array[i]);

//判断默认选中的下拉菜单

_array[i] == c["selected"] && (_select.options[i].selected = true);

}

//以下写法都相同,&&运算符,比如 1 && 2,如果1为false,那么整条语句直接返回false,2不会被执行,如果1为true,那么就会继续执行2.这条语句相当于if(c['id']){
_select.id = c["id"];
},即先判断一下c['id']是否存在。

c["id"] && (_select.id = c["id"]);

c["name"] && (_select.name = c["name"]);

c["onchange"] && (_select.onchange = c["onchange"]);

return _select;

//看方法名,就是指创建select下拉列表,
//传递的参数c
function createSelect(c){

//这就是定义一个字面对象,有两个属性nation和shengxiao
var _inner = {

"nation" : ['汉族','蒙古族','彝族','侗族','哈萨克族',

'畲族','纳西族','仫佬族','仡佬族','怒族','保安族',

'鄂伦春族','回族','壮族','瑶族','傣族','高山族',

'景颇族','羌族','锡伯族','乌孜别克族','裕固族','赫哲族',

'藏族','布依族','白族','黎族','拉祜族','柯尔克孜族','布朗族',

'阿昌族','俄罗斯族','京族','门巴族','维吾尔族','朝鲜族',

'土家族','傈僳族','水族','土族','撒拉族','普米族','鄂温克族',

'塔塔尔族','珞巴族','苗族','满族','哈尼族','佤族','东乡族',

'达斡尔族','毛南族','塔吉克族','德昂族','独龙族','基诺族'],

"shengxiao" : ['鼠','牛','虎','兔','蛇','蛇','马','羊','猴','鸡','狗','猪'],

"degree" : ['小学','初中','高中','中专','大专','本科','硕士','博士']

}

//如果c有 array属性则_array = c["array"],
//否则_array = _inner[c["type"]],c["type"]的值应该是'nation'或
//'shengxiao',因为“||”是短路操作符,就是左边为true,就不计算右边的
var _array = c["array"] || _inner[c["type"]];

//创建select标签
var _select = document.createElement("select");

for(var i=0; i < _array.length; i++){

_select.options[i] = new Option(_array[i], _array[i]);
//”&&“也是短路操作符,就是左边为true,才会计算右边的,如果左边为false,就不会计算右边的
//也就是只是当_array[i] 等于c["selected"] 时,就执行_select.options[i].selected = true,相当于
if( _array[i] == c["selected"] )
_select.options[i].selected = true);

    _array[i] == c["selected"] && (_select.options[i].selected = true);   
}   

//下面就基本上一样了
c["id"] && (_select.id = c["id"]);

c["name"] && (_select.name = c["name"]);

c["onchange"] && (_select.onchange = c["onchange"]);

return _select;

}