2018年前端社招笔试题分享

以下是2018年年终,面某公司的笔试题。为啥如今才分享出来,地道是因为之前懒。只分享题,没有答案。

1.请经由过程代码完成下面的效果

function add(num){
    var total = 0; 
    var curryAdd = function(num){
        total = total + num;
        return total;
    }
    return curryAdd;
}

console.log(add(2)(3)); //效果为5
console.log(add(2)(3)(4)(5)); // 效果为14

2.请回复按钮点击前后,代码中的两个console.log在浏览器控制台的输出信息
并诠释征象背地的缘由.

let count = 0;

class MyComponent extends React.Component{
  constructor(){
    super();
    this.state = {
      count : count
    };
  }
  
  componentWillMount(){
    this.setState({
      count : ++count
    });
    
    this.setState({
      count : ++count
    });
    
    setTimeout(() => {
      this.setState({
        count : ++count
      });

      this.setState({
        count : ++count
      });
    }, 1000);
  }
  
  componentDidMount(){
    this.button.addEventListener('click', this.onClick.bind(this, '原生浏览器事宜'), false);
  }
  
  onClick(info) {
    console.log(info);
    
    this.setState({
      count : ++count
    });
    
    this.setState({
      count : ++count
    });
  }
  
  render() {
    console.log(this.state.count);
    return (
      <div>
        <button type="button" ref={node => this.button = node} onClick={this.onClick.bind(this, 'React事宜')}>天生新计数</button>
        <div>Count : {this.state.count}</div>
      </div>
    );
  }
}

ReactDOM.render(<MyComponent />, mountNode);

3.throttle的简朴完成


function throttle(func, duration) {
        // 在这里编写详细完成
}

window.addEventListener('scroll', throttle(func, 50), false);

4.完成一个深度优先搜索算法(非递归)

    
function dfs(tree, name){
    // 请在这里完成
}

var tree = {
    name : '中国',
    children : [
        {
            name : '北京',
            children : [
                {
                    name : '旭日大众'
                },
                {
                    name : '海淀区'
                },
                {
                    name : '昌平区'
                }
            ]
        },
        {
            name : '浙江省',
            children : [
                {
                    name : '杭州市',
                    code : 0571,
                },
                {
                    name : '嘉兴市'
                },
                {
                    name : '绍兴市'
                },
                {
                    name : '宁波市'
                }
            ]
        }
    ]
};

var node = dfs(tree, '杭州市');
console.log(node);    // { name: '杭州市', code: 0571 }

5.编写一个简朴的自定义事宜处理器: 1.具有 on 要领绑定事宜, 2.具有 off 要领解绑事宜


function EventEmitter () {
    // TODO

}

var emitter = EventEmitter();

emitter.on('foo', function(e){
    console.log('listening foo event 1', e);
});

emitter.on('foo', function(e){
    console.log('listening foo event 2', e);
});

emitter.on('bar', function(e){
    console.log('listening bar event', e);
});

// 监听悉数事宜
emitter.on('*', function(e){
    console.log('listening all events');
});

emitter.trigger('foo', {name : 'John'});
emitter.trigger('bar', {name : 'Sun'});
emitter.trigger('*', {name : 'Sun'});
emitter.off('foo');

6.请用原生 JS 完成 DOM 拖动效果,只管多斟酌兼容以及其他能够的状况

    原文作者:CoyPan
    原文地址: https://segmentfault.com/a/1190000017397375
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞