引言:在最近笔试过程中,有碰到一些自己感觉需要注意的知识点,以此作为记录和复盘。
问题一:JavaScript函数定义语法var fn = function() {} 和 function fn() {}的区别。
我们平时会遇到两种函数定义方式
第一种是函数声明:
funName()//正常执行
function funName(){
//code
}
第二种是函数表达式:
funName()//报错
var funName=function(){
//code
}
重点:解析器在向执行环境加载数据时,对这两种是有区别的,解析器会率先读取函数声明,以确保在执行任何代码之前可以访问,而函数表达式,则必须等到解析器执行到他所在的代码才会被真正执行。
做道题理解一下
问题二:一道async/await打印输出题
可能带着promise套路,没有get到await的坑,这里它会阻塞后面的代码,先去执行async外面的同步代码。 解析可以参考:www.cnblogs.com/fundebug/p/…
async function async1() {
console.log("async1 start");
await async2();
console.log("async1 end");
}
async function async2() {
console.log("async2");
}
console.log("script start");
setTimeout(function() {
console.log("setTimeout");
}, 0);
async1();
new Promise(function(resolve) {
console.log("promise1");
resolve();
}).then(function() {
console.log("promise2");
});
console.log("script end");
输出:
script start
async1 start
async2
promise1
script end
promise2
async1 end
setTimeout
其他杂七杂八
- 升序:return a - b && 降序:return b - a
- HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
- HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
更新2022/03/18
问题三 布尔输出题
var x = new Boolean(false);
console.log(typeof x);
if(x){
alert('hi');
}
var y = Boolean(0);
if(y){
alert('hello');
}
第一个会弹出,第二个不会弹出,因为第一个是对象。
Generator
Generator是ES6提供的一种异步编程的解决方案。
形式上有两个特征。一是,function关键字和函数名之间有个星号;二是,函数内部使用yield语句,定义不同的内部状态。
function * gen() {
yield 1;
yield 2;
yield 3;
}
下面选项描述正确的是哪个?
- gen()执行后返回2
- gen()执行后返回undefined
- gen()执行后返回一个Generator对象
- gen()执行后返回1
选第三个