每日一题(让我变优秀吧!)
1. let是否存在变量提升
let有变量提升,但是由于有暂时性死区所以看起来没有 变量提升。
var x = 'parent value';
(function(){
console.log(x); // parent value
}())
var x = 'parent value';
(function(){
console.log(x);// Cannot access 'x' before initialization
let x = 'chlid value';
}())
2. JS原型链的理解,并且是否有创建实例时隐式原型__prpto__赋值的特殊情况
- 原型
- 所有引用类型(数组、对象、函数)都具有对象特性,可以自由扩展属性
- 所有引用类型(数组、对象、函数)都有一个隐式原型属性__proto__属性,值为普通对象
- 所有函数都有一个显示原型属性 prototype 属性,值为一个普通对象
- 所有引用类型(数字、对象、函数),实例对象的隐式原型__prototype__属性指向它的构造函数的显示原型__prototype__属性值,即:obj.proto = Function.prototype
- 原型链
- 现在自身属性上查找,返回。
- 未找到沿着__proto__这条链向上查找,找回返回
- 最后还是没有找到,返回undefined 尽头是:Object.prototype.proto === null
3. 这两段代码的执行顺序
代码一
new Promise((resolve, reject) => {
console.log("外部promise1");
resolve();
}).then(() => {
console.log("外部第一个then");
return new Promise((resolve, reject) => {
console.log("内部promise");
resolve();
}).then(() => {
console.log("内部第一个then");
}).then(() => {
console.log("内部第二个then");
});
}).then(() => {
console.log("外部第二个then");
});
外部promise1
外部第一个then
内部promise
内部第一个then
内部第二个then
外部第二个then
代码二
new Promise((resolve, reject) => {
console.log("外部promise2");
resolve();
}).then(() => {
console.log("外部第一个then");
new Promise((resolve, reject) => {
console.log("内部promise");
resolve();
}).then(() => {
console.log("内部第一个then");
}).then(() => {
console.log("内部第二个then");
});
}).then(() => {
console.log("外部第二个then");
});
外部promise2
外部第一个then
内部promise
内部第一个then
外部第二个then
内部第二个then