JS知识点总结
一、关于变量提升与临时性死区
直接上题
下面的代码中会打印出多少?
var a = 1;
function fn() {
console.log(a);
if (false) {
var a = 2;
}
}
fn();
这里考察了JS的变量提升,但很多情况大家都想到了全局和函数作用域中的变量提升,却没有注意到判断语句中的变量提升(因为使用的var关键字没有块级作用域)。变量提升后的代码为:
var a;
function fn() {
var a;
console.log(a);
if (false) {
a = 2;
}
}
a = 1;
fn();
现在很明显,log会打印出undefined
那如何打印出1呢,我们使用let声明变量就会产生TDZ(临时性死区),这样if块中的变量就不会提升到函数顶层作用域中去了。
var a = 1;
function fn() {
console.log(a);
if (false) {
let a = 2;
}
}
fn();
二、如何跳出forEach循环
因为传入forEach函数的参数是一个函数,所以在这个函数里写return并不能跳出循环,写break因为并没有在循环也会报错。因此,要想跳出循环,可以利用try...catch...,当需要跳出循环时,抛出一个错误,外部处理这个错误即可跳出循环。
try {
namesArr.forEach(val => {
if (val === 'tjj') {
throw new Error();
}
console.log('name:', val);
});
} catch (err) {
console.log('break foreach');
}
本文探讨了JavaScript中的变量提升(Hoisting)现象,特别是在函数内部和条件语句中的表现,强调了let声明的变量不会被提升,形成了临时性死区(Temporal Dead Zone, TDZ)。此外,还讲解了如何在forEach循环中跳出,通过抛出错误并用try...catch捕获来实现。这些知识点对于深入理解JS作用域和控制流程至关重要。
5366

被折叠的 条评论
为什么被折叠?



