js——函数

  1. 函数自调用

            //一次性函数----声明的同时直接调用
            (function f1(形参){
                var num=10;//局部变量
                console.log("jajaja");
            })(实参);
    
  2. 函数----对象

    //函数一定是对象,但对象不一定是函数
    //对象中一定有__proto__原型
    //函数中一定有prototype原型
    function f1(){
    
    }
    console.dir(f1);
    console.dir(Math);//是对象,有__proto__原型,不是函数,没有prototype原型
    //对象中应该有__proto__原型,函数中应该有prototype原型
    
    function f2(name){
        this.name=name;
    }
    console.dir(f2);//是对象
    //所有的函数实际上都是Function的构造函数创建出来的实例对象
    console.log(f1.__proto__==Function.prototype);//true
    console.log(Function);
    
    //数组中的函数调用
    //数组可以存储任何类型的数据----函数也是数据类型
    var arr=[
        function () {
            console.log("开心");
        },
        function () {
            console.log("快乐");
        },
        function () {
            console.log("健康");
        },
        function () {
            console.log("安全");
        }
    ];
    //回调函数
    arr.forEach(function (ele) {
        ele();
    });
    
  3. 函数中几个成员

       function f1(x,y){
        if(x>20){
            return 1;
        }
        console.log(f1.name);//函数名
        console.log(f1.arguments.length);//实参个数
        console.log(f1.length);//形参个数
        console.log(f1.caller);//调用者
        //arguments.callee()是一个指向正在执行的函数的指针
        console.log(arguments.callee(2*x,y));
        return x+y;
    }
    f1(10,20);
    
  4. if-else语句中的函数

//        函数声明
//        if(true){
//            function f1(){
//                console.log("好困");
//            }
//        }else{
//            function f1(){
//                console.log("不困");
//            }
//        }
//        f1();
        //函数声明如果放在if-else语句中,在IE8浏览器中会出现问题
        //函数表达式
        var ff;
        if(true){
            ff=function (){
                console.log("好困");
            }
        }else{
            ff=function (){
                console.log("不困");
            }
        }
        ff();
        //用函数表达式就是正确的
  1. 函数中this的指向
        /**
         * 函数中this的指向
         *
         * 普通函数中this是谁--------window
         * 对象.方法中的this是谁-------当前实例对象
         * 定时器方法中的this是谁--------window
         * 构造函数中的this是谁-------实例对象
         * 原型对象方法中的this是谁-------实例对象
         *
         */
        //严格模式
        "use strict";

        function f2(){
            console.log(this);//undefined
        }
        f2();

        function f1(){
            console.log(this);//window
        }
        window.f1();
  1. 作用域和作用域链

    //作用域链----层层搜索,直到0级
     var num=10;//作用域链,级别 0
     function f1(){
        var num=20;//作用域链,级别 1
         function f2(){
          var  num=30;//作用域链,级别 2
             console.log(num);
         }
         f2();
     }
     f1();
    

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值