• JS的一些总结(函数声明和函数表达式的区别,函数中的this指向的问题,函数不同的调用方式,函数也是对象,数组中的函数调用)


    一、函数声明和函数表达式的区别:

    • 函数声明放在if——else语句中,在IE8中会出现问题
    • 函数表达式则不会
       <script>
            if(true){
                function f1(){
                    console.log("我是第一个函数");
                }
            }else{
                function f1(){
                    console.log("我是第二个函数");
                }
            }
            f1();//我是第一个函数
            f1();//我是第二个函数(IE8)
            //函数声明的函数,放在if--else语句中,在IE8中显示的不一样
            //但是当使用函数表达式的方法,却不会
            if(true){
                var f2=function(){
                    console.log("我是第一个函数");
                }
            }else{
                var f2=function (){
                    console.log("我是第二个函数");
                }
            }
            f2();//我是第一个函数
        </script>

    二、函数中的this指向的问题

    • 普通函数中的this------------window
    • 定时器中的this---------------window
    • 构造函数中的this------------实例对象
    • 对象。方法中的this----------当前的实例对象
    • 原型方法中的this----------实例对象
    • 严格模式下的this-----------undefined
      <script>
        //1.普通函数中的this------------window
            function f1(){
                console.log(this);
            }
            f1();//Window
        //2.定时器中的this---------------window
            setInterval(function(){
                 console.log(this);//Window
             },1500)
        //3.构造函数中的this------------实例对象
        //4.对象。方法中的this----------当前的实例对象
        //5.原型方法中的this----------实例对象
        function Person(){
                this.name=name;
                this.show1=function(){
                    console.log(this);
                }
            }
            Person.prototype.show2=function(){
                console.log(this);
            }
            var per=new Person("小明");
            per.show1();//Person {name: "", show1: ƒ}
            per.show2();//Person {name: "", show1: ƒ}
        //6.严格模式下的this-----------undefined
            function f2(){
                "use strict";
                console.log(this);
            }
            f2();//undefined
        </script>

    三、函数不同的调用方式

    • 普通函数-------直接函数名()
    • 构造函数-------通过new来调用,创建对象
    • 对象方法------点语法,对象.方法调用

    四、函数也是对象,对象不一定是函数

    • 函数有prototype原型,是对象,对象中有__proto__,原型是对象
    • 如果一个对象里面有prototype又有__proto__,既是原型也是对象
    • Math是对象,但是没有__proto__,不是函数
    • 所有的函数实际上都是Function的构造函数创建出来的实例对象

    五、数组中的函数调用(forEach)

       <script>
            var arr=[
                function f1(){console.log("f1函数")},
                function f2(){console.log("f2函数")},
                function f3(){console.log("f3函数")},
                function f4(){console.log("f4函数")}
            ];
            arr.forEach(function(ele){
                ele();//f1函数  f2函数 f3函数 f4函数
            });
        </script>
  • 相关阅读:
    Go 协程(绿程/轻量级线程 用户态)--没有历史包袱
    Go 语言编码规范
    hexo 问题解决
    vue3中的watchEffect的参数
    开机提示0xc0000428无法验证此文件的数字签名的解决方法
    实现用户名的更换登陆
    element 新组件
    Object 常用方法
    Odoo中登录接口返回的session_id失效
    详细解析DLL构建CLR版本冲突问题
  • 原文地址:https://www.cnblogs.com/EricZLin/p/9067422.html
Copyright © 2020-2023  润新知