学习笔记5-函数

函数

JavaScript的核心,JavaScript的核心,JavaScript的核心,重要的事情说三遍

函数定义

function 函数名字(参数1, 参数2, ...) {
    函数体,执行的语句
    return 返回值 //return语句可以不写,不写默认返回undefined
}

函数参数

  • 函数参数只在函数范围内有效;
    let number = 3;
    function addOne(number) {
        number++;
        console.log(number);
    }
    addOne(number); // 4
    console.log(number); //3
  • 函数参数为对象类型时,要注意,函数内的修改会对外部有影响的;
    let obj = { age: 10 };
    function changeAge(a) {
        a.age++;
        console.log(a.age);
    }

    changeAge(obj); // 11
    console.log(obj.age); //11

JavaScript中基本类型传递到函数里时,是对原始值的复制,如果是对象传递的是函数的引用

  • JavaScript没有函数重载问题,你传递参数多了少了,调用的都是同一个函数;

参数解构

这个和之前说的对象的解构是一样的,你传给函数的参数,也会按照之前讲的解构来解析参数;

    function sayHello({name, message}) {
        return `${name}, ${message}`;
    }

    sayHello({name: 'a', message: 'hello.'}); // a, hello.

参数中可以使用展开操作符,但是必须是最后一个参数

    function addNames(name1, ...names) {
        let arr = [];
        arr.push(name1);
        for (let i in names) {
            arr.push(names[i]);
        }
        console.log(arr);
    }

    addNames('a', 'b', 'c'); // a,b,c

默认参数

函数的参数可以给一个默认的值,如果不赋值,则默认为undefined

this关键字

this是函数体内的只读字段;this具体指的是什么,由方法如何被调用决定。

箭头函数

  • 可以省略function;
  • 只有一个参数时,可以省略括号;
  • 如果只有一个表达式时,可以省略大括号;
    const f1 = function() { console.log('f1'); }
    const f2 = () => console.log('f2');
    const f3 = function(name) { console.log(`hello, ${name}`) }
    const f4 = name => console.log(`hello, ${name}`);

函数指定this

  • call, apply, 他俩最大区别是参数
    const bruce = { name: 'Bruce' };
    const madeline = { name: 'Madeline' };

    function greet() {
        return `Hello, I'm ${this.name}!`;
    }

    greet();
    greet().call(bruce);
    greet().call(madeline);
  • bind,永久绑定this,再调用call绑定别的对象,是不会变的;
    function sayHello() {
        console.log(`Hello, ${this.name}!`);
    }

    const mike = { name: 'Mike' };
    const jake = { name: 'Jake' };

    const bindMike = sayHello.bind(mike);
    bindMike(); //Hello, Mike
    bindMike.call(jake); //Hello, Mike

你可能感兴趣的:(学习笔记5-函数)