(精华)2020年7月4日 JavaScript高级篇 ES6(函数扩展)

93 阅读1分钟

函数参数的默认值

function Person(name = '张三',age=18){
    this.name = name
    this.age = age
}
let person1 = new Person()
console.log(person1);
// 好处
// 1 阅读代码清晰
// 2 有利于代买维护  有利于封装代码
// 注意:有默认参数声明 内部不能用let const声明
function fn(x,y="123"){
    let x = 1;
}
fn(1)

与结构赋值结合的使用

function fn({x,y=5}){
    console.log(x);
    console.log(y);
}
fn({}) // undefined 5
fn({x:1})
fn({x:1,y:9})
function getFn([x=3,y=5]){
    console.log(x);
    console.log(y);
}
getFn([1])
function getFn([x=3,y=5] = [1]){
    console.log(x);
    console.log(y);
}
getFn()

参数默认值会形成单独的作用域

// 函数的参数会形成一个单独的作用域
// 等到初始结束这个作用域就会消失
function f(x,y=x){
    console.log(y);
}
f(2)
//相当于形成了一个单独的块级作用域
{
    let x = 2
    y = x
}

参数展开运算符打包

// 写一个方法计算 1,2,3相加的结果 用到for...of 循环
// 第一种方法
function add(){
    // console.log(arguments);
    // ... Array.from()
    let sum = 0
    for (let i of arguments){
        console.log(i);
        sum += i
    }
    return sum
}

console.log(add(1,2,3));
// 第二种方法 参数展开运算符打包
function add1(...values){
    console.log(values);
    let sum = 0
    for (let i of values){
        console.log(i);
        sum += i
    }
    return sum
}
console.log(add1(1,2,3));

函数内部严格模式的改变

// es6 函数参数指定了默认值 解构赋值 扩展运算符... 内部就不能用严格模式
// 因为我们的参数此时也会形成一个作用域 
// function get(a,b = a){
//     'use strict'
// }
// get()
// 方法一
'use strict'
function get(a,b = a){
    
}
get()
// 方法二
const doSome = (function(){
    'use strict'
    return function(a = 2){
        return 2
    }
}())