標籤: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
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: windAPI設計原則
- 最小特權原則:最小限度的暴露必要內容,而將其他內容都“隱藏”起來(將變數聲明在某個範圍內盡量不在全域範圍中)
- 盡量避免匿名函數
- 關聯關係中盡量避免函數名重複,會引發屏蔽覆蓋的副作用
- 內部委託(在內部調用)比直接委託(直接使用)可以讓API介面更加清晰
- 委託最好在內部實現,不要輕易的暴露出去
(以上答案三天后公布)
Javascript基礎知識小測試(一)