155個JavaScript基礎問題(1-5)

dav2100發表於2021-09-09

1. 輸出是什麼?

function sayHi() {
  console.log(name)
  console.log(age)
  var name = 'Lydia'
  let age = 21
}

sayHi()
複製程式碼

答案是:undefined和報錯 因為var 定義的變數具有變數提升的效果,但是僅僅是變數宣告的提升,並未進行賦值,所以是undefined,let定義的變數不具備變數提升的效果,所以是報錯的。 圖片描述

2. 輸出是什麼?

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

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

複製程式碼

答案是:333 和 012,因為JS的事件迴圈機制,setTimeout屬於宏任務,要等到同步程式碼執行完之後才能執行,var在此處定義的是全域性變數,因此同步程式碼執行完之後i已經變成了3,所以列印3個3,但是let定義的變數會形成一個塊級作用域,因此是0 1 2

3. 輸出是什麼?

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

shape.diameter()
shape.perimeter()

複製程式碼

答:輸出是20和NaN,因為diameter中的this指的是shape中的radius,但是perimeter由於是箭頭函式所以,當我們呼叫 perimeter 時,this 不是指向 shape 物件,而是它的周圍作用域(在例子中是 window)。

4. 輸出是什麼?

+true;
!"Lydia";
複製程式碼

解:+號會將true變為1,+號傾向於返回一個值,但是!傾向於返回一個布林值,因為"Lydia"是真實存在的,所以取反之後是false。

5. 哪一個是正確的?

const bird = {
  size: 'small'
}
const mouse = {
  name: 'Mickey',
  small: true
}
複製程式碼

圖片描述

答案:A,因為mouse透過點的形式呼叫bird的前提是mouse有這個屬性,但是它沒有,所以是無效的,但是bird.size是真實存在的,透過[]呼叫裡面存放的是small這個字串,這個和C選項是一樣的,同理說明D的說法是不對的,所以本題選A。

作者:Always_positive
連結:
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4479/viewspace-2797250/,如需轉載,請註明出處,否則將追究法律責任。

相關文章