码迷,mamicode.com
首页 > 其他好文 > 详细

2021.06.16(传参数)

时间:2021-06-16 18:12:17      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:操作符   问题   ret   全局变量   name   const   var   修改   sorry   

函数传参和默认参数的区别,传参如果传的是引用地址,则会对这个引用产生影响,但是如果是默认参数,则是创建了一个新对象,对原引用没有影响。

const person = {
  name: "Lydia",
  age: 21
}

const changeAge = (x = { ...person }) => x.age += 1
const changeAgeAndName = (x = { ...person }) => {
  x.age += 1
  x.name = "Sarah"
}

changeAge(person)
changeAgeAndName()

console.log(person)

result: name:‘Lydia‘, age:22

拓展运算符的熟悉程度,只有C选项是将数组变为了三个元素,其余选项均为一个数组

 

function sumValues(x, y, z) {
    return x + y + z;
}

 

sumValues(...[1, 2, 3])

可选连操作符(?.)

作用是如果该操作符前面的属性对象存在,则打印该属性对应的内容,如果不存在则返回undefined

const person = {
    firstName: "Lydia",
    lastName: "Hallie",
    pet: {
        name: "Mara",
        breed: "Dutch Tulip Hound"
    },
    getFullName() {
        return `${this.firstName} ${this.lastName}`;
    }
};

console.log(person.pet?.name);
console.log(person.pet?.family?.name);
console.log(person.getFullName?.());
console.log(member.getLastName?.());

result:Mara undefined Lydia Hallie ReferenceError

indexOf返回的下标

 

const groceries = ["banana", "apple", "peanuts"];

if (groceries.indexOf("banana")) {
    console.log("We have to buy bananas!");
} else {
    console.log(`We dont have to buy bananas!`);
}

 

result:We don‘t have to buy bananas!

indexOf返回的下标是0,这是一个假值,所以触发了else.

setter的认识

 

const config = {
    languages: [],
    set language(lang) {
        return this.languages.push(lang);
    }
};

console.log(config.language);

 

修改对象的属性,如果调用的话返回的是undefined。

 

 

这个方法存在的意义是修改对象的属性,如果调用的话返回的是undefined。

对象的解构赋值

 

const myFunc = ({ x, y, z }) => {
    console.log(x, y, z);
};

myFunc(1, 2, 3);

 

result:undefined undefined undefined

传入的应该是一个拥有x y z三个属性的对象,但是题目并未传入一个对象,所以打印的是3个undefined.

function sayHi(name) {
  return `Hi there, ${name}`
}

console.log(sayHi())

由于模板字符串中没有接收到name,所以返回的是undefined.

const person = {
  name: "Lydia",
  age: 21
}

let city = person.city
city = "Amsterdam"

console.log(person)

仔细想想并未对person对象添加任何属性

function checkAge(age) {
  if (age < 18) {
    const message = "Sorry, you‘re too young."
  } else {
    const message = "Yay! You‘re old enough!"
  }

  return message
}

console.log(checkAge(21))

result:挺坑的,意在考查const、let引起的块级作用域,由于块级作用域的存在,我们无法在块级作用域之外访问到声明的变量,请记住这个题。

for (var i = 0; i < 3; i++) {
  setTimeout(() => console.log(i), 1)
}

for (let i = 0; i < 3; i++) {
  setTimeout(() => console.log(i), 1)
}

result:333 和 012,因为JS的事件循环机制,setTimeout属于宏任务,要等到同步代码执行完之后才能执行,var在此处定义的是全局变量,因此同步代码执行完之后i已经变成了3,所以打印3个3,

但是let定义的变量会形成一个块级作用域,因此是0 1 2

箭头函数作用域问题

const shape = {
  radius: 10,
  diameter() {
    return this.radius * 2
  },
  perimeter: () => 2 * Math.PI * this.radius
}

shape.diameter()
shape.perimeter()

result:20和NaN,因为diameter中的this指的是shape中的radius,但是perimeter由于是箭头函数所以,当我们调用 perimeter 时,this 不是指向 shape 对象,而是它的周围作用域(在例子中是 window)。

 

2021-06-16  11:22:46

 

2021.06.16(传参数)

标签:操作符   问题   ret   全局变量   name   const   var   修改   sorry   

原文地址:https://www.cnblogs.com/zhenggc99/p/14888672.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!