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...')
原文地址:https://www.cnblogs.com/xuewei95/p/15015510.html