JS筆試面試題(後續更新)
阿新 • • 發佈:2019-02-19
1. 下面程式碼的執行結果是?
var length = 10;
function fn() {
console.log(this.length);
}
var obj = {
length: 5,
method: function(fn) {
fn();
arguments[0]();
}
}
obj.method(fn, 1);
答案:10 2
解析:首先,fn()執行時的this是指向window的,因為這個函式是作普通函式呼叫的,普通函式呼叫,this指向window。然後arguments代指實引數組,即 [function fn(){console.log(this.length); } ,
1] ,然後這裡的this是指這個陣列,不是指window。所以呼叫arguments[0]()時,會列印這個陣列的長度,即2.
2. 【百度2017實習生筆試題】填充calendar函式程式碼,使得頁面的顯示效果為下圖:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>JS寫簡單日曆</title> <style type="text/css"> body,html{padding: 0;margin: 0;font-size: 14px;color:#000;} table {border-collapse: collapse;width: 100%;table-layout: fixed;} /*border-collapse: collapse;為表格設定合併邊框模型*/ td,th {border: 1px solid #e1e1e1;padding: 0;height: 30px;line-height: 30px;text-align: center;} th{background: blue} .current{color:red;} </style> </head> <body id="body"> <table> <thead> <tr><th>一</th><th>二</th><th>三</th><th>四</th><th>五</th><th>六</th><th>日</th></tr> </thead> <tbody> <tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr> <tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr> <tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr> <tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr> <tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr> <tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr> </tbody> </table> <script type="text/javascript"> function calendar(year, month) { } calendar(2017,6) </script> </body> </html>
即做一個小日曆,如果是當前日期,則給單元格加紅。
答案:
function calendar(year, month) { var bLeap = (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; var nCount = [0, 31, bLeap ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month] || 0; var nStart = new Date(year, month - 1, 1).getDay(); //獲取1號是周幾 nStart = (nStart - 1 + 7) % 7; //從第幾個位置開始填充 // 當前 var oNow = new Date(); var nNowDate = oNow.getDate();//當前日期 var bCurrent = oNow.getFullYear() === year && oNow.getMonth() + 1 === month;//判斷是不是當前年份和月份 // 渲染 var aTd = [].slice.call(document.getElementsByTagName('td'), 0); var nVal = 1; //從1開始演算法 aTd.forEach(function (oTd, nIndex) { oTd.className = bCurrent && nVal === nNowDate ? 'current' : ''; if (nIndex >= nStart && nVal <= nCount) { oTd.innerHTML = nVal; nVal++; }else { oTd.innerHTML = ''; } }); }