1. 以下代码输出什么结果?
alert(a) a() var a = 3 function a(){ alert(10) } a() a = 6 alert(a) a()
分析:这道题考察声明提前,将上述代码转为实际代码
var a //声明提前function a (){ //声明提前 alert(10)
}
alert(a) //输出a函数 a() //输出10 a = 3 //a赋值为3a() //报错此时a值为3已不是函数,后续不再执行
a=6
alert(a) a()
2. 以下代码输出什么结果?
for(var i =0;i<5;i++){ setTimeout(()=>{ console.log(new Date(),i) },1000) } console.log(new Date(),i)
分析:这道题考察宏任务相关知识,js为单线程,遇到 包括整体代码 script,setTimeout,setIntervcal等会创建宏任务,待主线程/与微任务(Promise,process.nextTick)完成后再去处理宏任务,将上述代码转换为实际代码
for(var i =0;i<5;i++){ } setTimeout(()=>{ console.log(new Date(),i) console.log(new Date(),i) console.log(new Date(),i) console.log(new Date(),i) },1000) console.log(new Date(),i) //当前时间,5 //当前时间+1秒,5 //当前时间+1秒,5 //当前时间+1秒,5 //当前时间+1秒,5
3. 以下代码输出什么结果?
考察引用数据类型细节
var a = new Object(); a.value = 1; b = a; //b.value=1 b.value = 2;//b.value=2;a.value=2,因为a和b指向同一块引用类型的值 alert(a.value);
4.以下代码输出什么结果?
var foo = 1; function f(){ console.log(foo); var foo = 2; console.log(foo); } f();
分析: 考察 变量作用域 与变量声明提升转换为下述代码
var foo = 1;
function f(){
var foo //声明提前 有局部变量就不去使用外部的foo=1 就近原则
console.log(foo); //undefined
foo = 2;
console.log(foo); //2
}
f();