• JS函数 -- 功能,语法,返回值,匿名函数,自调用匿名函数,全局变量与局部变量,arguments的使用


    “JavaScript设计得最出色的就是它的函数的实现。” -- 《JavaScript语言精粹》

    函数包含一组语句,它们是JS的基础模块单元,用于指定对象的行为。一般来说,所谓编程,就是将一组需求分解成一组函数与数据结构的技能。

    1.函数的功能

    代码重复性使用

    模块化编程

    2.语法:

    使用函数前要先定义才能使用

    函数定义有三个部分:函数名,参数列表,函数体

    格式:

    1 function 函数名([参数1, 参数2, ...]){
    2 
    3   函数执行部分;
    4 
    5   return 表达式;
    6 
    7 }

    例如:

    1 <script>
    2     function display(first,second){
    3         alert(first+second);
    4     }
    5     var i=10;
    6     var j=20;
    7     display(i,j);
    8 </script>

    在上面这个例子当中,first,second是形参,i,j是实参。

    在函数执行过程中,形参值得改变不会影响实参。(按值传递)

    但是对象数据类型,是按引用传递(按地址传递),其他数据类型都是按值传递。

    比如,下面的例子,运行的结果是“aaa”

    1 <script>
    2     function display(obj){
    3         obj.name='aaa';
    4     }
    5     var p= new Object();
    6     p.name = 'bbb';
    7     display(p);
    8     alert(p.name);
    9 </script>

    3.关于函数的返回值问题

    函数遇到return会立即返回,后面代码不执行。

    4.关于匿名函数

    在JS当中每一个变量,包括函数都算是一个对象,都占据了内存地址。函数也是一种对象,占据了内存地址。内存包括,堆内存,栈内存,静态区和代码段。一般来说,变量名保存到栈内存中,变量对象的数据保存带堆内存当中。因为堆比栈大,但栈比堆快。函数会保存到内存当中的代码段中。代码段中的数据的引用是通过栈内存中的一个名字指向的。

     1 <script>
     2     //变量是可以保存数据的,也可以保存地址的
     3     var i=10;
     4     alert(i);
     5     
     6     function display(){
     7         alert('123');
     8     }
     9     
    10     i=display; //变量指向了这个函数的首地址
    11     i(); //弹出123
    12 </script>

    在上面这个例子中,function display(){} 其实是,在window对象下添加一个叫display的变量,它指向了这个函数的首地址。其中i=dispaly的意思就是,我们让window对象下的i指向这个函数的首地址。

    匿名函数的用法

     1 <script>
     2     //匿名函数的前期
     3     var i=function display(){
     4         alert('123');
     5     }
     6     i();
     7     
     8     //匿名函数的用法
     9     var j=function(){
    10         alert('123');
    11     }
    12     j();
    13 </script>

    5.自调用匿名函数

    格式: (function(){})();

    function(){} : 相当于返回首地址

    (function(){}) : 把这部分看作是一个整体

    (function(){})() : 相当于找到这个地址并执行

     1 <script>
     2     //自调用匿名函数
     3     (function(){
     4         alert('111');
     5     })();
     6     
     7     //带参数的自调用匿名函数
     8     (function(para){
     9         alert(para);
    10     })(222);    
    11 </script>

    自调用匿名函数的好处是,避免重名,自调用匿名函数只会在运行时执行一次,一般用于初始化。

     6.全局变量与局部变量

    1 <script>
    2     i=10;            //全局变量
    3     var j=20;        //全局变量
    4     function display(){
    5         var k=30;    //局部变量
    6         P=40;        //全局变量
    7     }
    8 </script>

    在函数内定义的就是局部的,否则就是全局的。局部变量只在局部作用域起作用。如果函数内的变量没有var声明,会直接影响全局的。

    机制:在JS中,如果某个变量没有var声明,会自动到上一层作用域中去找这个变量的声明语句,如果找到,就使用,如果没找到,继续向上查找,一直查找到全局作用域为止。如果全局中仍然没有这个变量的声明语句,那么会自动在全局作用域进行声明,这个就是JS中的作用域链。

    局部访问全局通过作用域链,全局访问局部要通过闭包。

    7.arguments的使用

    在一个函数内部,可以使用arguments属性,它表示函数的形参列表,是以数组形式体现的。

    在定义一个函数的时候,它的实参个数必须要与形参个数保持一致,有时,我们定义函数时,形参数目不能固定,这个时候就要使用arguments。

    1 <script>
    2     function showname(){
    3         //没有定义形参,那么所有形参会自动存放到arguments这个属性数组中
    4         for(var i=0;i<arguments.length;i++){
    5             document.write(arguments[i] + '<br>');
    6         }
    7     }
    8     showname('zhangsan','lisi','wangwu');
    9 </script>

    没有定义形参,那么所有形参会自动存放到arguments这个属性数组中。

  • 相关阅读:
    2020_java面试
    Centos7.2 安装docker、mysql和redis
    【源码讲解】Spring事务是如何应用到你的业务场景中的?
    奇葩说今晚聊前任|扒一扒你的前任企业邮箱
    一封一封邮件发送太累?个人邮箱快速群发解决烦恼
    企业邮箱客户端收发服务器如何设置?
    163VIP邮箱怎么设置邮件签名?如何群发邮件?
    企业版邮箱哪个适合学校邮箱?企业邮箱托管服务
    企业版邮箱购买哪个?公司邮箱如何申请?
    公司邮箱登录入口是?公司邮箱申请入口在?
  • 原文地址:https://www.cnblogs.com/platycoden/p/5198852.html
Copyright © 2020-2023  润新知