arguments 是类数组
[].slice.call(arguments) 可以把类数组转换成 数组
var a = function(){
console.log([].slice.call(arguments, 1));
};
a(1,2,1,3); //显示[2,1,3]
js中(function(){...})()立即执行函数
- 函数声明
(函数声明会导致函数提升,function会被解释器优先编译。函数声明可以写在任意区域,不会影响调用)
fnName(); // 可在函数声明前调用
function fnName(){...} //函数声明
2. 函数表达式
(函数表达式不会出现函数提升,JS解释器会逐行解析。因此只能在函数表达式后调用,在函数表达式前调用就会报错)
var a=function(){...} // 函数表达式
a(); //只能在函数表达式后面调用
给函数表达式加上()则函数表达式会被直接调用,而给函数声明加上()则会被忽略,函数声明不会被调用。
function fnName(){...}(); //函数声明会忽略掉后面的(),不会被调用
var a=function(){...}(); //函数表达式会直接调用
栗子:
(function(){
var arr=toArray(arguments);
console.log(Array.isArray(arr),arr);
})(1,2,3,4,5); //true,[1,2,3,4,5]
function toArray(arguments){
return [].slice.call(arguments);
}