arguments、length、callee、eval

arguments参数

说明:在js中的函数中,有两个隐藏的参数分别是this和arguments

arguments 是一个类似数组的结构,可以通过下标来操作函数的参数,但并非数组类型的。
在函数调用的时候,会将函数的所有参数都传入arguments对象中保存,因此我们可以通过操作arguments属性来操作参数
形参的数量大于实参的数量,则依次传入,未传入的设置为undefined
形参的数量小于实参的数量,则arguments中保存实际的值

length

函数内部的arguments数组拥有length属性,可以通过该属性获取用户调用时传入的实参的个数

函数本身有一个length属性,可以通过该属性来获取形式参数的个数

callee方法

函数内部的arguments对象中,有一个callee方法,该方法指向函数自身,常用于匿名函数的递归调用。

代码示例

function func() {
    console.log(arguments);
    console.log(arguments.length);  //调用函数时实际传入的参数数量
}

func(1,2,3,4,5);
console.log(func.length);           //预期的参数数量 —— 函数的形参数量

function func02(a,b) {
    console.log(a, b);
    console.log(arguments);
}

func02(1,2,3);  //实参的数量 > 形参的数量 则arguments保存实参的值
func02(1);      //实参的数量 < 形参的数量 则不足的补undefined

//匿名函数调用
(function () {
    //如果需要在该函数中调用自身,则可以使用arguments.callee方法
    arguments.callee();
})();

Function的应用

01 数组去重

var func = new Function("arr",`
var array = [];
for(var i = 0 ; i

02 返回传入函数中所有数据的最大值

var func = function () {
    var maxNumber = arguments[0];
    for(var i = 0;i

eval 的基本使用

eval函数用来讲字符串转换为JS的代码,并执行

eval 处理JSON数据代码示例

var jsonData = '{"name":"张三","age":18}';
//把json的数据转换为对象
var obj = JSON.parse(jsonData);
console.log(obj);


var jsonData = '{"name":"张三","age":18}';
//var obj = eval(jsonData);   //注意:如果直接这样写代码则会报错

//正确的处理方式
//方式一
eval("var obj = " + jsonData);
console.log(obj);

//方式二
//说明:使用eval来解析json格式字符串的时候,会将{}解析为代码块,而不是字面量
// 在使用的时候为了避免这种错误,需要在JSO的最外面加上(),如此则会把大括号当做一条语句来解析
var o = eval("("+jsonData+")");
console.log(o);

eval 注意事项

  • eval函数本身功能强大,但它的特性也为程序带来了很大的不确定性,因此在开发中并不推荐使用。
  • eval函数是动态的执行代码,因此其效率不如直接执行静态脚本高。

eval和Function比较

  • 相同点:都能够把字符串转换为Javascript的代码
  • 不同点:eval转换为js的代码之后马上就执行,而Function需要先创建函数,调用函数之后才会执行。

你可能感兴趣的:(arguments、length、callee、eval)