JavaScript函数小结

写在前面的话

  • 本文主要总结归纳了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(); //undefined
4.如果在函数内部出现与全局变量重名的变量,则局部变量覆盖全局变量。
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";
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值