面试题总结

389 阅读1分钟

下面会打印什么?

var a = 5;
function todo(){
    var a = 9
    return function(){
        a = 7
    }
}
todo()()
console.log(a)

答:5

测试文本的字符大小

<style>
* {
    font-size: 12px !important;
}
#test {
    font-size: 14px;
}
.test1 {
    font-size: 10px;
}
</style>
<div id="test" class="test1">123123</div>

答:12px

变量提升

console.log(foo())
function foo(){
    return bar()
    var bar = (function(){return 7})()
    function bar(){return 8}
}

答:8

Array.prototype.filter

(function(){
    var greet='Hello Shuidi'
    var togreet = [].filter.call(greet, function(e,i){
        return i>5
    })
    console.log(togreet)
})()

答: ["S", "h", "u", "i", "d", "i"]

  • 自执行函数
  • Array.prototype.filter
  • call

点击 li 输出索引值

<ul id="test">
    <li>第一条</li>
    <li>第二条</li>
    <li>第三条</li>
  </ul>
  <script>
    let testEl = document.getElementById('test')
    let liArray = document.getElementsByTagName('li');
    testEl.addEventListener('click', function(e){
      var liEl = e.target;
      var i = Array.prototype.indexOf.call(liArray, liEl);
      console.log(i)
    })
  </script>

实现 get 函数

let obj = {foo: {bar: {name:'dd'}}}
get(obj, 'foo.bar.name') // 输出 dd
obj = {}
get(obj, 'foo.bar.name') // 输出 undefined
get(obj, 'foo.bar.name', 'dd') // 输出 dd

// 函数如下
function get(obj, path, defaultvalue){}

答:

// path 默认 string
function get(obj, path, defaultvalue){
    let key = path.split('.').shift()
    path =path.split('.').splice(1).join('.')
    if (obj[key]) {
        if(path){
            return get(obj[key], path, defaultvalue)
        }
        return obj[key]
    } else {
        return defaultvalue
    }
}

主要考察递归

localStorage 相关

localStorage.setItem('show', false)
console.log(localStorage.show || '显示') // false
  • 第一点 localStorage.show 可以直接拿到 show
  • 第二点 localStorage 只能保存字符串

给缓存添加时效

请设计 localSrorage 添加时效

请解码被多次编码的URl

例子:https%253A%252F%252Fwww.baidu.com%252Ftest%253D1 结果:www.baidu.com/test=1

转义函数:

encodeURIComponent

转义除了字母、数字、(、)、.、!、~、*、'、-和_之外的所有字符。

包括 : /

encodeURI

转义除了 ; , / ? : @ & = + $ 之外的所有字符。

不能转义 : /

escape

转义除了 @ * _ + - . / 之外的字符

http

一次完整的 http 请求,期间需要多少次握手?(tcp?)

  • 建立连接 三次 断开连接 四次

0.1+0.2 ? 0.3

答:>