1. 程式人生 > >JS筆試面試題(後續更新)

JS筆試面試題(後續更新)

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 = '';
		}
	});
}