1.實現一個函式printNum,接受一個引數n,輸出n個遞增自然數 ·
輸出的自然數不能含有7(17,71,176)或為7的倍數(14,63);如果含有7或為7的倍數,則輸出下一個自然數;
· 支援多次呼叫,從0開始,每次自上次呼叫的末尾自然數繼續列印
· 例子:
printNum(); // 0
printNum(2); // 1,2
printNum(5); // 3,4,5,6,8
printNum(17); // 9,10,11,...,26,29,30
複製程式碼
思路:
1.對引數為undefined特殊處理
2.輸入的引數為輸出數字的長度
3.對數字進行判斷不能含有7或7的倍數
4.需要對每次最後輸出的值進行記憶
5.將陣列轉為字串輸出
複製程式碼
考察知識點:
1.陣列方法的使用
2.正則基本功
複製程式碼
程式碼:
let lastNum = 0
function printNum (num) {
if (!num) {
return 0
}
let arr = []
for (let i = 0; i < num; i++ ) {
lastNum ++
if (lastNum % 7 === 0 || /[7]/.test(lastNum) ) {
num ++
// 規避了 27 28這種情況
}
if (lastNum % 7 !== 0 && /[7]/.test(lastNum) ) {
arr.push(lastNum)
}
}
return arr.toString()
}
複製程式碼
最終輸出結果與題目一致,但此解法並不完美,1.判斷了兩次7的倍數和含有7的情況 2.動態改變了for迴圈的num值
複製程式碼
優化
let i = -1
function printNum (n) {
let res = []
res.push(++i)
while(n > 1) {
i++
if (i % 7 != 0 && !(/[7]/.test(i))) {
res.push(i)
n--
}
}
return res.join(',')
}
複製程式碼
用閉包實現
function printNum (n) {
let i = -1
return function temp (n) {
let res = []
++i
if (i % 7 === 0 || /[7]/.test(i)) {
printNum(n)
}
res.push(i)
if (n < 0) {
return res.push(i)
}
while (n > 1) {
i++
if (i % 7 !== 0 && !(/[7]/.test(i)) {
res.push(i)
n--
}
}
return res.join(',')
}
}
複製程式碼
2.實現一個函式,接受一個url陣列作為引數,返回一個Promise。
- 要求同時傳送請求獲取資源內容(傳送請求使用Fetch,fetch函式說明:fetch()必須接受一個引數-----資源的路徑。無論請求成功與否,它都返回一個promise物件,resolve對應請求的Response)
- 當任意一個資源載入成功(通過請求的status狀態即可)則將promise的狀態置為resolve,並將該url作為resolve的引數
- 當所有的資源都不成功時,promise狀態置為reject
題目解析(感覺這道題目不是重點)
1.引數為url陣列
2.同時傳送請求(讓我想到了預載入圖片、上傳多個檔案)
複製程式碼
- 寫出如下輸出值
this.a = 20
var test = {
a: 40,
init: () => {
console.log(this.a)
function go () {
console.log(this.a)
}
go.prototype.a = 50
return go
}
}
var p = test.init() // 20 先執行 . 再執行 ()
p() // 20
複製程式碼
箭頭裡的this指向頂級物件test的作用域,指向window
this.a = 20
var test = {
a: 40,
init: function () {
console.log(this.a)
function go () {
console.log(this.a)
}
go.prototype.a = 50
return go
}
}
test.init() // 40
複製程式碼
var handler = {
id: '123456',
init: function() {
document.addEventListener('click',
event => console.log(this), false);
}
}
handler.init() // 呼叫列印的this是hander物件
var handler = {
id: '123456',
init: ()=> {
console.log(this)
}
}
handler.init() // 呼叫列印的this是window
複製程式碼