Javascript基礎知識小測試(一)

來源:互聯網
上載者:User

標籤:rip   new   foo   最好   一句話   是什麼   查詢   原則   引用   

這裡羅列了《你不知道的js》上卷的一些知識點以及小問題,如果你想鞏固一下js那麼就和我一起來看看吧。

如果你能不看書就回答上80%的問題說明你js的這一部分學得還不錯,再接再厲。

範圍和閉包詞法範圍
  • 變數賦值操作會執行的兩個動作
  • RHS 和 LHS 查詢
  • 在範圍頂層無法找到目標變數,在strict 模式和非strict 模式下有什麼結果?
  • with的副作用
  • 匿名函數的三個缺點
  • IIFE是什麼
  • JS的塊範圍以及如何隱式類比塊範圍?
  • let 和 var 在變數聲明有什麼區別?
  • 提升(變數、函數有什麼區別)
閉包
  • 閉包產生的原理
1 function foo() {  2     function bar() {}; 3      /*...*/4 }
        當函數可以記住並且訪問所在的詞法範圍時,就產生了閉包,即使函數是在當前詞法範圍之外執行。         bar對foo內部範圍的引用就叫做閉包
  • 閉包遇上for迴圈,問題、機制、解決辦法(考慮let)
  • 模組的兩個必要條件
  • import 和 module 的區別
this和對象原型this
  • 胖箭頭 => 的作用原理
  • this是運行時綁定還是編譯時間綁定?
  • this的四個綁定及其原理
  • 綁定的優先順序
  • 為什麼setTimeout()中的this會預設綁定到window?
  • 寫一個硬綁定bind(obj, target);
  • 硬綁定的優勢
  • 使用new調用函數時會發生的四個步驟?
對象
  • js中的六個基本類型、六個內建對象
  • 函數從來不會屬於某一個對象
  • get和set,get的函數名和函數值分別代表什麼
  • in 和 hasOwenPrototype 的區別
  • for...in 的特點?為什麼說數組的遍曆盡量不用 for...in?
  • 類的繼承其實就是複製,js不能複製
  • 隱式混入和顯式混入的區別(前者直接全部“複製”過來,後者用call、apply)
原型
  • 原型鏈上的隱式屏蔽
  • 使用new一個有原型的對象的時候會發生什麼步驟?
  • Foo.prototype的 .constructor 屬性是一直存在的嗎?它的指向?
  • var b = Object.create(a);的作用機制
  • Object.create(); 的缺點
 行為委託
  • 一句話概括:函數的繼承,對象的委託
  • 委託的兩個原則:1、狀態儲存在委託者,而不是委託目標。2、避免在[prototype]鏈上的不同位置使用相同的命名
  • 委託的實質?
  • 根據下面函數繼承寫出相應的行為委託
    函數繼承:
 1 function A(name) { 2 this.name = name; 3 } 4 A.prototype.sayName = function() { 5 console.log(this.name); 6 }; 7 function B(name) { 8 A.call(this, name); 9 }10 B.prototype = Object.create(A.prototype);11 var b = new B(‘Nic‘);12 b.sayName(); //Nic
答案:        行為委託:
1 var A = {2 init: function(name) { this.name = name; },3 sayName: function() { console.log(this.name); }4 };5 var B = Object.create(A);6 B.init(‘Nic‘);7 B.sayName() //Nic

 

怎麼改變的:
  • 將函數封裝對象
    • 將建構函式內部的變數定義封裝成一個函數
    • 將prototype對象的函數逐一封裝進該對象
  • 將兩個對象關聯
    • 此時沒有繼承的說法了,關聯不是上下級的關係,而是任意的
    • 關聯後可以自訂或者封裝新對象的一些屬性及方法
  • 注意:盡量避免暴露委託
class
  • class不能聲明屬性只能聲明方法
 1 class A { 2 constructor(name, age) { 3 this.name = name; 4 this.age = age; 5 } 6 sayName() { 7 console.log(‘hello, my name is: ‘+this.name); 8 } 9 }10 var a = new A(‘wind‘, 20);11 a.sayName(); //hello, my name is: wind
API設計原則
  • 最小特權原則:最小限度的暴露必要內容,而將其他內容都“隱藏”起來(將變數聲明在某個範圍內盡量不在全域範圍中)
  • 盡量避免匿名函數
  • 關聯關係中盡量避免函數名重複,會引發屏蔽覆蓋的副作用
  • 內部委託(在內部調用)比直接委託(直接使用)可以讓API介面更加清晰
  • 委託最好在內部實現,不要輕易的暴露出去

 

(以上答案三天后公布)

Javascript基礎知識小測試(一)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.