以下是本人几次面试中出现几率最高的几道题,整理了一下,和大家分享,请批评指正,共同进步。
/*this 的作用域的考察*/
var obj = {
show: function () {
this.display = true;
},
hide: function () {
this.display = false;
}
};
obj.show();
alert(obj.display); // true
alert(window.display); //undefined
/*递归1,1,2,3,5,8,13,21,34,55...求第30位值是多少?*/
function ForValue(num) {
if (num < 0) {
return 0;
}
if (num == 1) {
return 1;
} else {
return ForValue(num - 1) + ForValue(num - 2);
}
};
alert(ForValue(10)); //第10位是:55; 第30位的话,会提示(也可能和电脑性能有关)
/*arguments 的测试*/
function b(x, y, a) {
/*
arguments[2] = 10;
alert(a); //此2句与下边的2句结果是一样的。
*/
a = 10;
alert(arguments[2]);
}
b(1,2,3); // 结果都是 10
/*编写一个JavaScript函数 parseQueryString,它的用途是把URL参数解析为一个对象*/
function parseQueryString(url) {
var params = url.substring(url.indexOf('?') + 1);
var keyValues = params.split('&');
var obj = {};
for (var i = 0; i < keyValues.length; i++) {
var temp = keyValues[i].split('=');
obj[temp[0]] = temp[1];
}
return obj;
}
var obj = parseQueryString('http://camnpr.com/demo.aspx?a=1&b=2&c=3');
alert(obj.a + obj.b + obj.c); //123
/*闭包:指有权访问另一个函数作用域中的变量的函数*/
function a(name, age) {
return function () {
if (name == "camnpr" && age == 24) {
return 1;
} else {
return 0;
}
};
}
var info = a('camnpr', 24);
alert(info()); //1;
/*如何点击每一列的时候 alert 其 index ? <ul id="test"><li>这是第一条</li><li>这是第二条</li><li>这是第三条</li></ul>*/
window.onload = function () {
var ul = document.getElementById("test");
var lis = ul.getElementsByTagName('li');
for (var i = 0; i < lis.length; i++) {
lis[i].onclick = function (num) {
return function () { //应用了闭包
alert(num);
}
} (i);
/* 区别于:
lis[i].onclick = function () {
alert(i); // 一直都是3
};*/
}
};
以上是典型的js面试题,本文还会继续更新,敬请关注!