JavaScript函数小结

来源:互联网 发布:python能做成包吗 编辑:程序博客网 时间:2024/05/19 17:27

  • 写在前面的话
  • 函数的声明
  • 关于函数的返回值
  • 关于函数参数的一些特殊说明
  • 作用域
  • 匿名函数
  • 匿名函数的自执行技术
  • 模拟重载
  • 函数的递归调用
  • 一些细节例子
    • 传递多个参数的时候
    • 作用域的问题
    • 匿名函数

写在前面的话

  • 本文主要总结归纳了JavaScript的函数一些基础知识,JavaScript语法自由,但是会与传统的面向对象语言的一些语法有差异,因此记录本文,以便后续查阅,文中如有错误,请看官留言指正,共同交流,进步,谢谢!

函数的声明

  • function 函数名([形式参数]){//函数体}
  • 函数声明只是告诉js这个函数存在。
  • 函数只有先调用,才会被执行。
  • 函数调用:
    • 函数名([实际参数])
    • 圆括号内根据需要可以声明形参,定义形参的时候只需要参数名,而不要var来声明。形参的个数不固定,根据需要,可以有多个形,也可以一个也没有。(圆括号内的形参有时候我们也称之为形参列表)

关于函数的返回值

  • return
    • return语句的语法是:return 返回值; 返回值可以省略,表示仅仅结束函数。
    • 如果省略return语句或者有return但是没有返回值,这个时候,返回的是undefined
  • 1、如果想给调用者返回值,则可以通过return来返回。
  • 2、如果一个方法没有显式的使用return,则这个方法默认返回的是undefined。
  • 3、只要在函数内部碰到了return,那么这个函数不管还有多少代码,不管循环有多深,不管循环有没有执行完,都会立即结束函数,并返回返回值。

关于函数参数的一些特殊说明:

  • 1、如果传递实参的个数小于形参的个数,则后面的不会赋值,默认为undefined。
  • 2、传递的实参可以多余形参的个数。
function add(a, b, c){    if(a === undefined){        a = 0;}if(b === undefined){}//   a = a === undefined ? 0 : a;     a = a || 0; //a为null时是个 }
  • 任何的函数都有一个内部的对象arguments,看成一个数组,就存储了我们传入的所有的参数。

作用域

  • 1、全局作用域

    • 整个脚本都属于全局作用域
  • 2、函数作用域

    • 函数内部

    • 全局变量:

    • 在函数外部声明的变量就叫全局变量。

    • 局部变量:

    • 在函数内部声明的变量,就是局部变量。
    • 如果在一个函数的内部声明变量的时候没有使用var,那么这个变量将自动成为全局变量。
    • 注意:使用严格模式的时候,不能省略var来声明
function f(){a = 5} alert(a);//输出5
  • 总结:
    • 1、在函数内部可以访问全局变量
    • 2、在函数内部可以访问这个函数内部定义的局部变量
    • 3、函数外部不能访问局部变量
    • 4、如果在函数内部出现于全局变量重名的变量,则局部变量覆盖全局变量。
    • 5、局部变量也会声明提前,提前到这个函数的最顶。

匿名函数

  • 没有名字的函数
  • 函数名.name 返回的是这个函数的名字
  • 可能只执行一次的时候,就可以考虑用匿名函数。


  • boolean,number,string这三种,可以认为每次把基本数据类型的值复制一份,传递到方法的内部。

  • 变量的话,可以不加引号,如果不是的话,一般都要加。


匿名函数的自执行技术:

(function(){alert("我是一个匿名函数");})();或:(function(){alert("我是一个匿名函数");}());---------------var max = (function(m, n){return m > n ? m : n})(5, 6);alert(max);

模拟重载

  • 1、声明的所有全局函数,都会声明提前。换句话说,我们可以先调用,把函数的声明放在后面也是可以的。
  • 2、函数可以重复声明,但是后声明的会自动覆盖前声明的。
  • 3、js中就没有重载的存在。

函数的递归调用

  • 递归:函数自己调用自己
  • 1、递归调用栈会越来越深,占用的内存越来越多。
  • 使用递归一定要满足两个条件:
  • 1、必须要有递归结束的条件
  • 2、随着递归的深入,必须能够达到那个结束条件(收敛)

一些细节例子

传递多个参数的时候

function add(a, b, c){    if(a === undefined){        a = 0;}if(b === undefined){}//   a = a === undefined ? 0 : a;     a = a || 0; //a为null时是个 }

    function add () {        var sum = 0;//      alert(arguments.length);  //表示传递的参数的个数        for(var i = 0; i < arguments.length; i++){            sum +=arguments[i];        }        return sum;    }    alert(add(1, 2, 5));    alert(add(1, 2, 5,400));

作用域的问题

    var a = 10;    function f(){        alert(a);  //undefined        var a = 5;    }    f(); //undefined4.如果在函数内部出现与全局变量重名的变量,则局部变量覆盖全局变量。5.局部变量也会声明提前,提前到这个函数的最顶。    a =10;    function f() {        alert(a);        a = 5;    }    f();//先调用函数,输出10    alert(a);//调用函数的时候,没有var,所以a=5成为全局变量,执行完函数后,alert输出5,严格模式不行    function f() {        alert(a);        a = 5;    }    f();    alert(a);//没有输出,直接报f函数里的a没定义

匿名函数

    var div = document.getElementsByTagName("div")[0];    div.onmouseover = function() {        div.style.backgroundColor = "blue";    }    div.onmouseout = function() {        div.style["background-color"] = "pink";    }
0 0
原创粉丝点击