var面试题

1var 存在变量提升(Hoisting),变量声明会被提升到作用域顶部,但赋值不会。
复制代码
console.log(a); // undefined
var a = 10;


等价于
var a;
console.log(a); // undefined
foo = a;
2函数声明 vs 函数表达式 + 变量提升考题(函数声明先提升var 只提升声明赋值留在原地执行)
复制代码
JS 在真正执行代码前会做一件事:

🔥 先"提升"变量声明和函数声明
1️⃣  函数声明优先级最高
function foo() {}
2️⃣ var 变量声明会提升
var foo
只提升声明,不提升赋值
console.log(foo); // ?
var foo = function () {
  console.log("foo");
};
foo(); // ?

function foo() {
  console.log("function foo");
}
foo(); // ?

关键点:

函数声明会覆盖 var 声明
但不会覆盖后面的赋值
// 函数声明提升(覆盖变量声明)
function foo() {
  console.log("function foo");
}

// var 声明被忽略(因为函数已经声明过 foo)
var foo;

console.log(foo);

foo = function () {
  console.log("foo");
};

foo();

foo();
开始逐行执行
console.log(foo);1
最终输出结果
ƒ foo() { console.log("function foo"); }
foo
foo
题1
复制代码
function a() {}
var a;
console.log(a);
a = 1;
console.log(a);
函数申明最上面提升到会直接覆盖变量申明
题2
✅ 第三组:作用域 + var
题3:闭包 + var
题4面试杀手题
题5(最后一个函数声明覆盖前一个:就是function a会被后面同样的函数申明 function b 覆盖)

6val申明:this 高级题
复制代码
for (var i = 0; i < 3; i++) {
  Promise.resolve().then(() => {
    console.log(i);
  });
}
7asycn事件循环(
  • await 之前是同步

  • await 之后是微任务

)async 函数本身是同步执行的

只有 await 之后才是异步

相关推荐
PD我是你的真爱粉1 小时前
深入理解 Event Loop:JavaScript 的“心脏起搏器”
开发语言·javascript·ecmascript
GIS程序猿2 小时前
批量出图工具,如何使用C#实现动态文本
开发语言·arcgis·c#·arcgis插件·gis二次开发
dzl843942 小时前
mac 安装python
开发语言·python·macos
北风toto2 小时前
JDK8(JAVA)供应商说明
java·开发语言
量子物理学2 小时前
四、C#高级进阶语法——委托(Delegate)
开发语言·c#
WebInfra2 小时前
Modern.js 3.0 发布:聚焦 Web 框架,拥抱生态发展
前端·javascript·前端框架
上下求索,莫负韶华2 小时前
java-(double,BigDecimal),sql-(decimal,nuermic)
java·开发语言·sql
敲敲了个代码2 小时前
浏览器时间管理大师:深度拆解 5 大核心调度 API
前端·javascript·学习·web
JobDocLS2 小时前
C++重要知识点相关代码
开发语言·c++