JavaScript 让你意外的瞬间(函数)

函数呢,对于任何一门语言都是一个核心的概念。
在C或者JAVA中,我们定义函数,要么是Void无返回类型的,要么是有返回值类型的。
那在JS中呢,定义一个函数没有那么多条条框框。。。。。又是很特别的。
我们来看一下JS中的函数怎么写:

    <script>
        function f1(name,age){
            console.log(name+age);
        }
        f1("wangwu ",13);
    </script>

仔细一看,和之前的好像也没啥大的区别,但好像又哪里不一样。。。
这样我再给你看一下,如果我这么写:

    <script>
        function f1(var name,var age){
            console.log(name+age);
        }
        f1("wangwu ",13);
    </script>

这里面没有显示,但是在编译器里面是会报错的,也就是说,和之前不同的是,我们不能在参数里面声明类型(虽然var也看不出来是啥类型)可能正是这个原因,所以JS中的函数中的参数,不能用var来声明。。。。
在这里插入图片描述
基本概念知道了的话,就开始好玩的了。
如果在我们之前的学习中,我们知道函数的参数写了几个,那么调用的时候传的实参就要有几个对吧。
JS不这么认为。。。。。。

JS的函数不介意你传递过来多少个参数,也不在乎你传进来的参数类型。那是为什么呢?
原因是JS的参数在内部是用一个数组来表示的,接收的也是个数组,所以不会在乎里面有多少,有几个。。。。

这个时候就会出现一个好玩的东西,叫做arguments,在函数体内,可以通过这个对象来访问参数数组。。

我们来个例子看:

    <script>
        function sayHi(){
            console.log("Hello "+arguments[0]+arguments[1]);
        }
        sayHi("wangwu ","lisi");
    </script>

来我们看一下打印结果:
Hello wangwu lisi

是不是发现虽然JS很闹心但有时候还是挺有趣的。。。

关于arguments我们还可以这么玩。

    <script>
        function howManyArgs(){
            console.log(arguments.length);
        }
        howManyArgs("123");
        howManyArgs(1,2);
        howManyArgs(true,false,true)
    </script>

打印出来呢,不出所料的是1,2,3.

然后再来看个更好玩的:

    <script>
        function doAdd(num1,num2){
            arguments[0]=10;
            console.log(num1+num2);
        }
        doAdd(20,10);
        doAdd(30,10);
    </script>

两次打印的结果会是什么呢?
emm,都是20.。。。
那这说明了什么呢。说明实参的值和arguments的值是同步的,那是不是说明他们指向了相同的内存空间呢?不是这样的,他们的内存空间是相对独立的,只是值会同步,这一点要记住。

刚才都是说的传参数传多了的情况。
那么如果传少了呢?

    <script>
        function f2(data1,data2,data3){
            console.log(data1);
            console.log(data2);
            console.log(data3);

        }
        f2(1);
    </script>

我们来看一下打印的结果:
1
undefined
undefined

那给我们的结论是什么呢?
没有传递值得命名参数会被自动赋予undefined值。

最后来总结一下,JS中既然有这种神操作,那么能不能联想到在C和JAVA中学的一种情况:重载函数
在JS中是没有重载函数的,原因想一下也就能想明白。但即便没有重载函数,通过我这一篇说的知识点,JS是不是也能实现出类似重载函数功能的函数!

OK,关于函数的一些有趣的事也欢迎补充。。。

©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页