zoukankan      html  css  js  c++  java
  • JS的函数对象

    Function 对象(重点)

    函数的定义:

    '''
    function 函数名 (参数) {

        函数体;
        return 返回值;
    }
    '''

    功能说明:

    • 可以使用变量、常量或表达式作为函数调用的参数
    • 函数由关键字function定义
    • 函数名的定义规则与标识符一致,大小写是敏感的
    • 返回值必须使用return

    Function 类可以表示开发者定义的任何函数。

     Function 类直接创建函数的语法如下:

    '''
    function 函数名 (参数) {
    
函数体;
    return 返回值;
    }

    //another way:
    var 函数名 = new Function("参数1","参数n","function_body");
    '''

    虽然由于字符串的关系,第二种形式写起来有些困难,但有助于理解函数只不过是一种引用类型,它们的行为与用 Function 类明确创建的函数行为是相同的。

    实例:

    '''
    alert(1);
    function func1(){
        alert('hello yuan!');
        return 8
    };
    
    ret=func1();
    alert(ret);
    ----------------
     
    var func1=new Function("name","alert("hello"+name);");
    func1("yuan")
    '''

    注意:js的函数加载执行与python不同,它是整体加载完才会执行,所以执行函数放在函数声明上面或下面都可以:

    <script>
        //f(); --->OK
    
        function f(){
            console.log("hello")
    
        }
    
        f() //----->OK
    </script>

    Function 对象的 length 属性

    如前所述,函数属于引用类型,所以它们也有属性和方法。

    比如,ECMAScript 定义的属性 length 声明了函数期望的参数个数。

    alert(func1.length)

    Function 对象的方法

    Function 对象也有与所有对象共享的 valueOf() 方法和 toString() 方法。这两个方法返回的都是函数的源代码,在调试时尤其有用。

    函数的调用

    function func1(a,b){
    
        alert(a+b);
    }
    
        func1(1,2);  //3
        func1(1,2,3);//3
        func1(1);    //NaN
        func1();     //NaN
    
        //只要函数名写对即可,参数怎么填都不报错.
    
    -------------------面试题-----------
     function a(a,b){
        alert(a+b);
    }
    
       var a=1;
       var b=2;
       a(a,b)

    函数的内置对象arguments

    function add(a,b){
    
            console.log(a+b);//3
            console.log(arguments.length);//2
            console.log(arguments);//[1,2]
    
        }
        add(1,2)
    
        ------------------arguments的用处1 ------------------
        function nxAdd(){
            var result=0;
            for (var num in arguments){
                result+=arguments[num]
            }
            alert(result)
    
        }
    
        nxAdd(1,2,3,4,5)
    
    //     ------------------arguments的用处2 ------------------
    
        function f(a,b,c){
            if (arguments.length!=3){
                throw new Error("function f called with "+arguments.length+" arguments,but it just need 3 arguments")
            }
            else {
                alert("success!")
            }
        }
    
        f(1,2,3,4,5)

    匿名函数

    // 匿名函数
        var func = function(arg){
            return "tony";
        }
    
    // 匿名函数的应用
        (function(){
            alert("tony");
        } )()
    
        (function(arg){
            console.log(arg);
        })('123')
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>标题</title>
    </head>
    <body>
    
        <script>
            // 函数第一种创建方式
            function f(x,y) {
                console.log(x+y); // return是函数返回值,无return时返回undefined
            };
            f(1,1); // 2
    
            // 函数第二种创建方式
            var obj=new Function('x', 'y', 'console.log(x+y)'); // 虽然由于字符串的关系,第二种形式写起来有些困难,但有助于理解函数只不过是一种引用类型,它们的行为与用 Function 类明确创建的函数行为是相同的
            obj(2,2); // 4
    
            // 注意:js的函数加载执行与python不同,执行代码之前,把所有function先加载完,所以执行函数放在函数上面或下面都可以
            foo('alex');
            function foo(name) {
                console.log('hello '+name);
            };
            foo('mike');
    
            // Function对象的length属性
            console.log(f.length); // 2,代表函数需要几个参数
    
            // Function对象的方法valueOf()/toString(),这两个方法返回的都是函数的源代码
            console.log(add.valueOf()); // ƒ add(x,y,z) {return x+y+z;}
            console.log(add.toString()); // function add(x,y,z) {return x+y+z;}
    
            // 函数调用(参数多与少的问题)
            function add(x,y,z) {
                return x+y+z;
            };
            console.log(add(1,2,3,4,5,6)); // 6,传入的参数多于函数规定参数个数时,只取前面对应需要的参数
            console.log(add(1,2)); // NaN,传入参数少于函数规定参数个数时,缺少的参数默认为undefined;因为undefined无法转为数字,数字与字符串相加结果为NaN
            console.log(add('1','2')); // '12undefined',可以证明最后一个缺少的参数值为undefined
    
            //***********面试题***********
            // function func(x,y) {
            //     return x+y;
            // };
            // var func=1;
            // var b=2;
            // func(func,b); // Uncaught TypeError: func is not a function,和python一样,func又指向了数字1覆盖了之前的指向
    
            // 函数的内置对象arguments,无论函数传入多少参数都能被封装到arguments中
            function f1() {
                console.log(arguments); // Arguments(5) [1, "2", 3, "hello", Array(2), callee: ƒ, Symbol(Symbol.iterator): ƒ]
                for (var n in arguments) {
                    console.log(arguments[n]);
                };
            };
            f1(1,'2',3,'hello',[4,'5']); // 1;'2';3;'hello';[4,'5']
    
            // 第一种匿名函数写法
            var f2=function(arg) {
                alert(arg);
            };
            f2('hello'); // 与正常函数区别在哪里?正常函数调用可以写在函数前面,而此种方法不可以
            /* f3('no_function');
            var f3=function(arg) {
                alert(arg);
            }; */ // 打开控制台发现报错信息,Uncaught TypeError: f3 is not a function
    
            // 第二种匿名函数写法(自执行函数)
            (function(args) {
                console.log(args);
            })('javascript'); // 'javascript'
        </script>
    
    </body>
    </html>
    while True: print('studying...')
  • 相关阅读:
    线性时间将两个有序链表合成一个有序链表(constant additional space)
    C++定义指针数组
    cmd运行java编译文件
    java的方法
    Java流程控制
    用户交互-Scanner
    Java的注释
    编译型语言和解释性语言
    JDK、JRE和JVM
    MarkDown的简单使用
  • 原文地址:https://www.cnblogs.com/xuewei95/p/15015510.html
Copyright © 2011-2022 走看看