六,函数深入

1、函数的返回值return

1.1、返回值语法结构

function 函数名(){

return 需要返回的结果

}

函数名()
1.2、返回值注意事项
  • 函数只是实现某种功能,最终的结果需要返回给函数的调用者(谁调用函数,函数实现结果功能反馈给谁),函数名()=return 后面的结果,通过return实现的;可以定义一个变量,让return来接受该结果
  • 在函数中,return之后的语句就都不会执行,有终止函数的作用
  • return只能返回一个值,多个值,返回的是最后一个值。如果有需求返回多个值,可以将多个值放入数组或者对象里
  • return后可以跟任意类型的值
  • 如果return后不跟任何值,就相当于返回一个undefined
  • 如果函数中不写return,则也会返回undefined
      // 需求:创建一个函数,用来计算三个数的和
          function sum(a, b, c) {
            var d = a + b + c;
            //console.log(d);
            //alert(d);
            return d;
          }
          //调用函数,变量result的值就是函数的执行结果
          var result = sum(4, 7, 8);
          //函数返回什么,result的值就是什么
          console.log("result=" + result);
    1.3、返回值类型

    返回值可以是任意的数据类型, 也可以是一个对象 ,函数  

    //1:返回值对象
            function fun2() {
                //return 10;
                var obj = { name: "沙和尚" }
                return obj;//return {name:"沙和尚"}        
            }
            var a = fun2();
            console.log("a=" + a);
    
            //2:返回值是函数
            function fun3() {
                //在函数内部还可以声明一个函数
                function fun4() {
                    alert("我是fun4");
                }
                //将fun4函数作为返回值返回
                return fun4;
            }
             a = fun3();//将箱子里的冰淇机器赋值,也就是fun4
             a=fun3;//与上面的区别,整个fun3函数赋值
            console.log(a);
    1.4、break、continue、return的区别
  • break:结束当前的循环体(for、while)
  • continue:跳出本次循环,继续执行下次循环(for、while)
  • return:结束当前循环体,return后的语句不会执行, return函数的结果
     function fun() {
          alert("函数要执行了~~~");
          for (var i = 0; i < 5; i++) {
              if (i == 2) {
                  break;//退出当前的循环
                  continue;//用于跳过当次循环
                  return;//使用return可以结束整个函数
              }
              console.log(i);
          }
          alert("函数执行完了~~~");
      }
      //fun();

    2、arguments的使用

在调用函数时,浏览器每次都会传递两个隐含的参数:
1:函数的上下文对象 this
2:封装实参的对象 arguments
当我们不确定有多少个参数传递的时候,可以使用arguments来获取,在JS中,arguments实际上它是当前函数的一个内置对象。所有函数都内置了一个arguments对象,arguments对象中存储了传递的所有实参。
(1)、arguments 是一个类(伪)数组对象
它可以通过索引来操作数据,通过arguments.length可以获取实参的长度获取长度
伪数组并不是真正意义上的数组
■具有数组的length属性
■按照索引的顺序进行存储的
■它没有真正数组的一些方法
(2)、在调用函数时,我们所传递的实参都会在arguments中保存
(3)、我们即使不定义形参,也可以通过grguments来使用实参,只不过比较麻烦
arguments[0]表示第一个实参
arguments[1]表示第二个实参
(4)、arguments有个属性叫callee,
这个属性对应一个函数对象,就是当前正在指向函数的对象
 

function fun() {
    //这两种都是检查arguments是不是数组
    //console.log(arguments instanceof Array);//false
    //console.log(Array.isArray(arguments));//false
    //console.log(arguments.length);//用来获取实参的长度
    //console.log(arguments[0]);//hello
    console.log(arguments.callee);//指向当前这个对象
  }
  fun("hello", true);

3、函数方法call()、apply()、bind()

-这两个方法都是函数对象的方法,需要通过函数对象来调用

-当对函数调用call()和apply()方法时,都会调用函数执行

-在调用call和apply()可以将一个对象指定为第一个参数, 此时这个对象将会成为函数执行的this

-call()方法可以将实参在对象之后一个个传递

apply()方法需要将实参封装到一个数组中统一传递

     var name = "我是window";
      function fun(a) {
        console.log("a=", a);
        alert(this.name);
      }
      var obj = {
        name: "我是obj1",
        sayName: function () {
          alert(this.name);
        },
      };
      var obj2 = {
        name: "我是obj2",
      };
      //obj.sayName(); //obj
      //obj.sayName.call(obj2);//obj2
      //fun.call(obj, 2);//obj1,2
      //fun.apply(obj2, [2,3]);
      //fun(1);

总结this的情况

1.以函数形式调用时,this永远是window

2.以方法的形式调用时,this是调用方法的对象

3.以构造函数的形式调用时,this是新创建的那个实例对象

4.使用call和apply调用时,this是指定的那个对象,如果不写第一参数,默认是window

4、函数调用函数

每个函数都是独立的代码块,用于完成特殊任务,因此经常会用到函数相互调用的情况

一般情况下,一个函数只做一件事

     function fn1(){
            console.log(111);
            fn2();
            console.log('fn1');
        }
        function fn2(){
            console.log(222);
            console.log('fn2');
        }
        fn1()

5、立即执行函数

语法结构:函数对象()

立即执行函数,函数定义完后,立即被调用,立即调用函数,往往只会执行一次

  //第一种写法
  (function(){
           alert("我是一个匿名函数~~~");
       })();//外面的()是把整个函数当作函数名,后面的()是调用函数的意思
//第二种写法
     (function () {
      alert('匿名函数执行方式二')
    }());
//匿名函数传参
    (function(a,b){
           console.log("a="+a);
           console.log("b="+b);
      })(123,456);//不仅可以调用,还可以传值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值