无聊js题目

106 阅读2分钟

es5 es6转化问题

var a = 1
if(true){
    a = 2
    console.log(window.a, a, 1111111)
    a = 3
    console.log(window.a, a, 2222222)
    function a (){}
    console.log(window.a, a, 3333333)
    a = 4
    console.log(window.a, a, 4444444)
    a = 5
    console.log(window.a, a, 5555555)
}
console.log(window.a)

这个题目es5 到es6用法混用导致bug,es5没有块级作用域的,es6出现块级作用域,本题中在块级作用域声明函数,es6规定函数变量提升到块作用域顶部,函数声明之前变量赋值是es5赋值,而函数声明之后是es6写法,可以看作是变量提升,此时对更高层变量重新赋值,锁区。

请求响应内容 Preview 和 Response 不一致、接口返回数据和 jsp 解析到的内容不一致

原因:js 解析 json 数据时,对于 long 类型数据长度有限制。此时的 long 类型数据 userId 长度超限,jsp 中解析时出现精度丢失,导致数据值出现误差。 解决:修改返回数据 long 类型为 String 类型,作为字符处理。

构造函数实例化

// 1
function Foo() {
    getName = function () { console.log(1); };
    return this;
}
// 2
Foo.getName = function () { console.log(2);}; 
// 3
Foo.prototype.getName = function () { console.log(3);}; 
// 4
var getName = function () { console.log(4);};
// 5
function getName() { console.log(5);}

//请写出以下输出结果:
Foo.getName(); // 执行2输出2
getName(); // 5 声明this.getName函数提升,4重新赋值this.getName 输出4
Foo().getName(); // Foo() 重新赋值getName,返回父级作用域,this.getName() 返回最新getName, 输出1
getName(); // 执行最新this.geName,输出1
new Foo.getName(); // new (Foo.getName)() 1.优先级:new有参数列表 = 点 > new五参数列表>函数调用。执行顺序:Foo.getName=== new (Foo.getName)() 输出2
new Foo().getName(); //(new Foo()).getName() 1.优先级:new有参数列表 = 点 > 函数调用。2.执行顺序:new Foo()===(new Foo()).getName===(new Foo()).getName() 输出3
new new Foo().getName(); // 依据上面优先级执行顺序:new Foo() === (new Foo()).getName === new ((new Foo()).getName)() 输出3

宏任务微任务页面渲染顺序:微任务>页面渲染>宏任务

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        setTimeout(() => {
            console.log(document.getElementById('test'), 2222222)// <div id="test">11111111</div> 2222222
        }, 0);

        new Promise(function(resolve, reject){
            resolve(document.getElementById('test'))
        }).then((dom)=>{
            console.log(dom, 111111) // null 111111
        })
    </script>
</head>
<body>
    <div id="test">11111111</div>
</body>
</html>