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>