美文网首页
JavaScript 函数

JavaScript 函数

作者: 1CC4 | 来源:发表于2020-04-01 10:39 被阅读0次

一、函数的定义与调用

1、定义

  • 函数的声明
 //函数声明
function info1() {
  console.log('函数声明');
}

函数声明必须有名字
函数声明会函数提升,在预解析阶段就已创建,声明前后都可以调用

info1();
//函数声明
function info1() {
  console.log('函数声明');
}
  • 函数表达式
//函数表达式
const info2 = function () {
     console.log('函数定义');
}

函数表达式类似于变量赋值
函数表达式可以没有名字,例如匿名函数
函数表达式没有变量提升,在执行阶段创建,必须在表达式执行之后才可以调用

2、调用

普通函数 函数()
构造函数 new 构造函数()
对象方法 对象.方法()

3、函数内this指向不同的场景

调用方式 非严格模式 备注
普通函数调用 window 严格模式下是 undefined
构造函数调用 实例对象 原型方法中 this 也是实例对象
对象方法调用 该方法所属对象 紧挨着的对象
事件绑定方法 绑定事件对象
定时器函数 window
//普通函数调用
    const info = function(){
        console.log('普通函数this  :',this);
    }
    // info();
  
    function Person(){
        console.log('构造函数this ',this);
        this.name = '构造函数'
        this.sayName = function(){
            console.log('对象方法this ',this);
        }
    } 
    Person.prototype.eat = function(){
        console.log('原型方式this :',this);
    }

    // Person.prototype.eat = () => {
    //     console.log('原型方式this :',this);
    // }

    const p = new Person();
    p.sayName();
    p.eat();

    const btn  = document.getElementById('btn');
    btn.onclick = function(){
        console.log('事件绑定this ',this);
    }

    setTimeout(function(){
        console.log('定时器this',this);
    },1000)

4、call、apple、bind方法的区别

函数对象的方法. : 在javascript中每一个函数都可以看作成一个对象,它对应的类型是Function

  • call、apple
        function info(name,age){
            console.log('info函数 :',this);
            console.log('name :',name,' ,age :',age);
        }

        Array.prototype.inverse = function(){
            console.log('Array this  :',this);
            // info();
            // info.call(this,'小明',17);
            info.apply(this,['小明',17]);
        }

call语法: 函数.call(obj,[参数列表]);
apple语法: 函数.apple(obj,[数组]);

  • bind

改变原函数中this指向

//普通函数
        this.x = 9;
       let module = {
            x: 81,
            getX: function () {
                return this.x;
            }
        };
//返回值
        const k = module.getX(); // 返回 81
        console.log('k ',k);

        let retrieveX = module.getX;
        const y = retrieveX(); 
        console.log('y ',y);

        // 创建一个新函数,将"this"绑定到module对象
        // 新手可能会被全局的x变量和module里的属性x所迷惑

        var boundGetX = retrieveX.bind(module);
        const a = boundGetX(); // 返回 81
        console.log('a ',a);

5、 自调用函数

立即执行函数,在创建后立即执行

(function(接收的变量y){
  //函数体
})(传入的变量x)
//把局部变量给父类就可以了

6、 高阶函数

函数可以作为参数也可以作为返回值

new Promise((resovel,rejected)=>{

})

其中promise参数就为函数

相关文章

  • Javascript 函数缺省值

    Javascript 函数 Javascript 函数缺省值写法

  • JavaScript函数式编程

    读完《JavaScript函数式编程》《JavaScript函数式编程指南》这两本书,对JavaScript函数式...

  • JavaScript函数式编程

    读完《JavaScript函数式编程》《JavaScript函数式编程指南》这两本书,对JavaScript函数式...

  • JavaScript函数

    layout: posttitle: JavaScript函数tags: [JavaScript, 函数]auth...

  • JavaScript encodeURI() 函数

    JavaScript encodeURI() 函数 JavaScript 全局函数](https://www.ru...

  • JavaScript中的函数

    @(javascript)[js函数] [toc] JavaScript中的函数 函数的分类与定义函数的方式 Ja...

  • JavaScript语言基础(二)

    JavaScript内置函数,这些函数都是由JavaScript语言自身提供,是JavaScript全局方法。pa...

  • JavaScript - 函数 - 1

    #JavaScript 函数定义 JavaScript 使用关键字 function 定义函数。函数可以通过声明定...

  • 2016-11-24

    JavaScript escape() 函数 JavaScript 全局对象 定义和用法:escape() 函数可...

  • JS 函数

    JavaScript 函数定义 JavaScript 使用关键字 function 定义函数。函数可以通过声明定义...

网友评论

      本文标题:JavaScript 函数

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