记录一下遇到的面试问题

上周末又泡咖啡馆看了一下午代码,收获不小,希望以后继续加油。

几道JS面试题整理了一下。

一、求下面这段代码的输出结果

var name="zhangsan";
function getName(){
	var arr=[1,2,3];
	for (var i = 0; i < arr.length; i++) {
		document.write("lily" + arr[i] + "<br />");
	};	
}
getName();
document.write(name);

输出结果是:
lily1
lily2
lily3
zhangsan

二、清除页面中所有DIV,下面这段JS有什么问题?

var divs = document.getElementsByTagName("div");
for( var i = 0; i < divs.length; i++){
	divs[i].parentNode.removeChild(divs[i]);
}

逻辑不对,DIV 元素是有层级的,如果外层的DIV删除了,里面的DIV也没有了,但是你获取到的 divs 数组里面还有循环的时候就会出错,

正确逻辑应该是查找所有div标签,然后获取第一个div,然后把它删除,循环这个过程,直到获取不到div,可以用到while循环语句

while(条件){
需要执行的代码
}

只要指定条件为 true,循环就可以一直执行代码。

如下是示例:

var divs = document.getElementsByTagName("div");
while (divs.length) {
    divs[0].parentNode.removeChild(divs[0]);
    divs = document.querySelectorAll("div");
};

三、请问下面几种情况中this变量,分别代表哪个变量,命令在运行结果如何?

var test = {
	setName:function(name){this.name = name;}
}

1)

var node = new test.setName("a");

2)

test.setName("b");

3)

var setName = test.setName;
   setName("c");

1)this指向node; 运行结构生成一个name=a的node对象;
2) this指向test;调用test的setName方法,给test增加一个name属性;
3) this指向global上下文(window);将test的setName方法赋给setName,在全局环境下调用setName方法,相当于window.setName(“c”);在window下增加(或修改)name属性,且值为c;

四、给出一串字符,如“google”,让字符倒序

function rev(str) {
    return str.split("").reverse().join("");
}
rev("google");

发表评论

电子邮件地址不会被公开。 必填项已用*标注