函数进阶

变量提升

var    在代码执行之前,把所有的var声明的变量提升到当前作用域的最前面 只提升声明,不提升赋值

函数提升

会把所有函数声明提升到当前作用域的最前面

函数提升能使函数声明更加灵活

函数表达式不存在提升现象

函数提升出现在相同作用域当中

函数参数

动态参数  arguements

是伪数组  只存在函数中  不能使用数组里边的函数

剩余参数  是真数组

function getSum(...other){

            console.log(other);


        }

        getSum(1,2,3,4,5);

剩余函数使用场景

用于获取多余的实参

剩余函数和动态参数区别是什么  开发时长使用哪一个

动态参数是伪数组

剩余参数是真数组

开发中使用剩余参数想必也是极好的

展开运算符也是...

const arr = [1,2,3];

console.log(...arr);

console.log(Math.max(...arr));

...arr === 1,2,3

展开运算符不会修改数组

数组没有求最大值的所以用展开运算符来进行求最大值

合并数组

arr = [...arr1,arr2];

展开运算符主要作用是

可以把数组展开,可以利用求数组的最大值以及合并数组等操作

展开运算符和剩余参数有什么区别

展开运算符主要是数组展开

剩余参数在函数内部使用

箭头函数

目的:引用箭头函数的目的是更简短的函数写法并且不绑定this,箭头函数的语法比函数表达式更简洁

使用场景:更适用于那些本来需要匿名函数的地方

只有一个参数时可以省略小括号    const fn = (x,y) =>x+y;

箭头指向是省略return

const fn = x =>x;

箭头函数可以直接返回一个对象  返回的对象用括号括起来()

const fn = (uname)=> ({name:uname});

        console.log(fn('刘德华'));

箭头函数属于表达式函数,一次不存在函数提升

箭头函数只有一个参数时可以省略括号()

箭头函数函数体一行代码时可以省略花括号{},并自动作为返回值被返回

加括号的函数体返回对象字面量表达式

箭头函数没有arguements动态参数,但是又剩余参数 ...arr

箭头函数没有this指向

箭头函数不会创建子级的this,他只会从自己的作用域链的上一级

解构

数组解构

是将数组的单元值快速批量赋值给一系列变量的简洁语法

const [max,min,avg] = [3,1,2];

console.log(max);

console.log(min);

console.log(avg);

数组交换

const a = 1;

const b = 2;

[b,a] = [a,b];

立即执行函数前面也要加分号

数组解构前面必须加分号

(function(){})();  立即执行函数

[]开头的上一步要加;

忽略赋值

const [a,b,,d] = [1,2,3,4];

console.log(d);

二维数组解构

const [a,b,[c,d]] = [1,2,[3,4]];

对象解构

const {uname,age} = {uname:'pink',age:123};

console.log(name,age);

解构的时候变量名要跟对象名相同  不然为underfined

如果有一样的话这样改名

const {uname:username,age:userage} = {uname:'pink',age:123};

console.log(name,age);

解构数组对象      对象是无序的只需要变量的名字和数组变量的名字一样即可

const pig = [{

            name:'pig1',

            age:2

        }]

        const [{name,age}] = pig;

多级对象解构对象要用冒号隔开

const pig = [{

            name:'pig1',

            age:2,

            family:{

                mother:123,

                father:456

            }

        }]

        const [{name,age,family:{mother,father}}] = pig;

forEach遍历数组    实际上就是回调i函数    不返回就是遍历  加强版的for循环  适合遍历数组都西昂

const arr = ['red','green','blue'];

        arr.forEach(function(item,index){    item必须写遍历数组  index可写遍历索引号

            console.log(item);

            console.log(index);


        })

        arr.forEach((item)=>console.log(item));    箭头函数

    </script>

filter  过滤方法    创建一个新的数组返回一个新的数组    return用于返回过滤的数组

const arr = [10,20,30];

const newarr =  arr.filter((item,index)=> {

    return item>=20;

})

console.log(newarr);

DOM 元素的 tagName 属性返回元素的标签名,且始终以大写形式表示。例如,<a> 标签的 tagName 值为 "A"。





深入对象和构造函数

创建对象三种方式

1字面量创建对象

const obj = {}

2new Object创建对象

const o = new  Object({})

3构造函数创建对象

构造函数是一种特殊的函数,主要用来初始化对象  可以通过构造函数快速创建多个类似的对象

构造函数有两个约定  命名时大写开头  只能通过new操作符执行function Pig(uname,age) {

            this.uname = uname;

            this.age = age;

        }

        let son =  new Pig('佩奇',6);

创建对象  只要加new就自动创建一个空对象  构造函数里边的this指向新对象 执行构造函数

代码,修改this,添加新的属性  返回新对象    this相当于obj


使用new关键字调用函数的行为被称为实例化

实例化构造函数时没有参数时可以省略()

构造函数无需写retrun,返回值即为新创建的对象

构造函数内部的return返回的值无效,所以不要写return  返回值时默认创建的对象

new Object()  new Date()也是实例化构造函数

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容