。。。前面基本上就是一些css,冒泡,变量提升的的笔试题,最后就记住了三个。
第一个:点击li输出相对应的index值
<ul id="test">
<li>click</li>
<li>click</li>
<li>click</li>
<li>click</li>
<li>click</li>
</ul>
//1、利用闭包实现
var nodeList = document.getElementsByTagName('li');
for (var i = 0; i < nodeList.length; i++) {
(function (j) {
nodeList[j].addEventListener("click", function (e) {
alert(j)
}, false);
})(i);
}
//2、ES6实现-利用ES6的let来实现
var nodeList = document.getElementsByTagName('li');
for (let i = 0; i < nodeList.length; i++) {
nodeList[i].addEventListener("click", function (e) {
alert(i);
}, false);
}
//3、利用事件委托机制
var nodeList = document.getElementsByTagName('li'),
arrNodes = Array.prototype.slice.call(nodeList),
nodeUls = document.getElementsByTagName('ul');
nodeUls[0].addEventListener("click", function (event) {
var event = event || window.event;
var target = event.target || event.srcElement;
alert(arrNodes.indexOf(target))
}, false);
第二个:js继承输出的问题
var name = 'oop'
var Person = function (options) {
this.name = options.name
}
Person.prototype.name = 'Person'
Person.prototype.getName = function () {
return this.name
}
Person.getName = function() {
return this.name;
}
var p = new Person({name: 'inke'})
console.log(p.constructor === ?) // true
console.log(p instanceof ?) // true
console.log(p.__proto__ === ?) // true
console.log(p.hasOwnProperty('name')) // ?
console.log(p.hasOwnProperty('getName')) // ?
var getName = p.getName
console.log(getName === Person.getName) // ?
console.log(getName()) // ?
console.log(Person.prototype.getName()) // ?
console.log(p.getName())// ?
console.log(Person.getName())// ?
第三个:异步的输出顺序问题
const promise = Promise.resolve('fe').then(res => {
console.log(res);
return promise2;
}).then(res => {
console.log(res + 2);
});
const promise2 = new Promise((resolve, reject) => {
console.log('in');
resolve(5);
return 996;
})
setTimeout(() => {
promise3.then(res => {
console.log('res: ', res);
}, err => {
console.log('err: ', err)
})
}, 0);
const promise3 = promise2.then(res => {
console.log(res);
throw 2;
}).catch(err => {
console.log(err);
})
console.log('ke');