美文网首页
JavaScript中函数的角色

JavaScript中函数的角色

作者: 东邪_黄药师 | 来源:发表于2018-09-16 11:35 被阅读0次
//函数的角色:
//函数的声明
function f1() {
  console.log("我是函数");
}
f1();
//函数表达式
var ff=function () {
  console.log("我也是一个函数");
};
ff();

========================================
//函数声明和函数表达式的区别:
//函数声明:
//函数声明

        if(true) {
            function f1() {
                console.log("哈哈,我又变帅了");
            }
        } else {
            function f1() {
                console.log("小苏好猥琐");
            }
        }
        f1();

        //函数表达式

        var ff;
        if(true) {
            ff = function() {
                console.log("哈哈,我又变帅了");
            };
        } else {
            ff = function() {
                console.log("小苏好猥琐");
            };
        }
        ff();

        //函数声明如果放在if-else的语句中,在IE8的浏览器中会出现问题
        //以后宁愿用函数表达式,都不用函数声明

================================================
函数中的this指向的问题:

  • 函数中的this的指向

    • 普通函数中的this是谁?-----window
    • 对象.方法中的this是谁?----当前的实例对象
    • 定时器方法中的this是谁?----window
    • 构造函数中的this是谁?-----实例对象
    • 原型对象方法中的this是谁?---实例对象
                  //严格模式:
         "use strict";    
                  //严格模式
    function f1() {
        console.log(this); //window
    }
    f1();

            //普通函数
    function f1() {
        console.log(this);
    }
    f1();

    //定时器中的this
    setInterval(function() {
        console.log(this);
    }, 1000);

    //构造函数
    function Person() {
        console.log(this);
        //对象的方法
        this.sayHi = function() {
            console.log(this);
        };
    }
    //原型中的方法
    Person.prototype.eat = function() {
        console.log(this);
    };
    var per = new Person();
    console.log(per);
    per.sayHi();
    per.eat();

    //BOM:中顶级对象是window,浏览器中所有的东西都是window的

===================================================
函数的不同的调用方式:

//普通函数
function f1() {
  console.log("文能提笔控萝莉");
}
f1();

//构造函数---通过new 来调用,创建对象
function F1() {
  console.log("我是构造函数,我骄傲");
}
var f=new F1();

//对象的方法
function Person() {
  this.play=function () {
    console.log("玩代码");
  };
}
var per=new Person();
per.play();

==================================================

//函数是对象,对象不一定是函数
//对象中有proto原型,是对象
//函数中有prototype原型,是对象

           function F1() {}
           console.dir(F1);
           console.dir(Math); //中有__proto__,但是没有prorotype

        //对象中有__proto__,函数中应该有prototype

        //如果一个东西里面有prototype,又有__proto__,说明是函数,也是对象

        function F1(name) {
            this.name = name;
        }

        console.dir(F1);

        //所有的函数实际上都是Function的构造函数创建出来的实例对象
        var f1 = new Function("num1", "num2", "return num1+num2");
        //此处等价于:
        function f1(num1,num2){
            return num1+num2
        }
        console.log(f1(10, 20));
        console.log(f1.__proto__ == Function.prototype);

        //所以,函数实际上也是对象

        console.dir(f1);

        console.dir(Function);

相关文章

网友评论

      本文标题:JavaScript中函数的角色

      本文链接:https://www.haomeiwen.com/subject/beixnftx.html