总结
大厂面试问深度,小厂面试问广度,如果有同学想进大厂深造一定要有一个方向精通的惊艳到面试官,还要平时遇到问题后思考一下问题的本质,找方法解决是一个方面,看到问题本质是另一个方面。还有大家一定要有目标,我在很久之前就想着以后一定要去大厂,然后默默努力,每天看一些大佬们的文章,总是觉得只有再学深入一点才有机会,所以才有恒心一直学下去。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
function foo() {
var flag = true;
if(flag) {
var a = ‘abc’;
let b = ‘ABC’;
console.log(a); // 输出abc
console.log(b); // 输出ABC
}
console.log(a); // 输出abc
console.log(b); // 报错
}
foo();
变量在定义的环境(函数)中以及嵌套的子函数中处处可用
var i = 100
for(var i=0; i<5; i++){
console.log(i) //1,2,3,4
}
console.log(i) //5
var的话就会导致在 for 循环的变量 i 覆盖掉循环之前的变量i,所以我们需要一块私有领域来包裹住for里面产生的变量,所以产生了块级作用域。
**let 声明的变量是块级作用域**
用let命令新增了块级作用域,使外层作用域无法获取内层作用域,使变量更安全,但是会造成**暂时性死区**
// 块级作用域: 外层作用域无法获取内层作用域
function a(){
let a=100;
if(a==100){
let a=300
console.log(a) //300
}
console.log(a) //100
}
a()
---
**const常量:**
const PI = 3.1415;
PI = 3.1415926; // 报错
##### var、let和const的区别
1. var 声明的变量会提升到作用域的顶部,而 let 和 const 不会进行提升
2. var 声明的全局变量会被挂载到全局 window 对象上,而 let 和 const 不会
3. var 可以重复声明同一个变量,而 let 和 const 不会
4. var 声明的变量作用域范围是函数作用域,而 let 和 const 声明的变量作用域范围是块级作用域。
5. const 声明的常量,一旦声明则不能再次赋值,再次赋值会报错(更改对象属性不会,因为对象地址没有变)
**作用域提升:**
在代码预编译时,javaScript 引擎会自动将 var 声明的语句提升到当前作用域的顶端,。
var声明的变量会提升到作用域的顶部, var可以在声明前调用,值默认为undefined
console.log(a); // 输出undefined
console.log(b); // 报错
console.log(PI); // 报错
var a = ‘abc’;
let b = ‘ABC’;
const PI = 3.1415;
**挂载到全局变量:**
全局环境下绑定的就是全局对象,浏览器下是window,node下是global。
var在全局作用域声明变量时会创建一个新的全局变量作为全局对象的属性 。var在全局声明变量时会被挂载到 window 对象上,可以使用window. 的形式访问该变量,或者直接使用变量名的方式。
如果省略变量前面的 let 或者 var 则该变量会成为一个全局变量
var varInfo = ‘var 在声明变量’
let letInfo = ‘let 在声明变量’
const PI = 3.1415;
// 定义函数,测试两个变量是否在函数体外部可以使用
function test(){
// 在函数作用域中声明的变量 在函数执行退出时立刻销毁
var msg = ‘这是局部变量’
// 没有用 var、let 声明的变量会被挂载到全局
message = '这是全局变量'
}
test()
// 在全局作用域下声明的变量
console.log(varInfo) // var 在声明变量
console.log(window.varInfo) //var 在声明变量
console.log(letInfo) //let 在声明变量
console.log(window.letInfo) /