inke笔试

74 阅读1分钟

。。。前面基本上就是一些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');