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函数代码,使得页面的显示效果为下图:



	
		
		JS写简单日历
		
	
	
		
JS笔试面试题(后续更新)_第1张图片

即做一个小日历,如果是当前日期,则給单元格加红。

答案:

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


你可能感兴趣的:(笔试/面试)