美文网首页
arguments、length、callee、eval

arguments、length、callee、eval

作者: LIT乐言 | 来源:发表于2022-02-20 11:39 被阅读0次

    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<arr.length; i++)
    {
        if(array.indexOf(arr[i]) == -1)
        {
            array.push(arr[i]);
        }
    }
    return array;
    console.log(func([1, 2, 3, 4, 5, 3, 4, 2]));;
    

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

    var func = function () {
        var maxNumber = arguments[0];
        for(var i = 0;i<arguments.length;i++)
        {
            if (maxNumber < arguments[i])
            {
                maxNumber = arguments[i];
            }
        }
        return maxNumber;
    }
    
    console.log(func(1, 2, 3, 45, 5, 6, 7, 8, 30, 21));
    

    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

          本文链接:https://www.haomeiwen.com/subject/haxgbxtx.html