JavaScript 遵循了一般编程语言的“语句 - 表达式”结构,多数编程语言都是这样设计的。
![](https://img.haomeiwen.com/i7662941/735961d809a536a7.png)
![](https://img.haomeiwen.com/i7662941/0ebe4819ad5bbf4f.png)
这里记录一下自己以前不太熟悉的知识点。
var语句
- 预编译阶段变量提升
console.log(a); // undefiend
var a = 1;
- 穿透for,switch,if等
if(true) {
var a = 1;
}
console.log(a); // 1
let和const语句
- 仅作用于当前作用域,不可再次声明。
- const声明的变量无法修改。
- 无变量提升问题。
- 不会穿透for,switch,if等
函数声明
- 预编译阶段提升
console.log(foo); // function
function foo() {};
- 在if中不会提升
console.log(foo); // undefined
if(true) {
function foo() {};
}
IIFE-立即执行的函数表达式
- 用来产生作用域,例如:
for (var i = 0; i < 10; i++) {
setTimeout(() => {
console.log(i); // 得到10个10
})
}
// 使用IIFE来得到0-9
for(var i = 0; i < 10; i++){
(function(a){
setTimeout(function(){
console.log(a); // 得到0-9
}, 0)
})(i);
};
- 产生只读的函数名特性
var a = 1;
(function a() {
console.log(a); // function
a = 2; // 在当前作用域中a作为函数名只读,无法修改
console.log(a); // function
})();
console.log(a); // 1;
网友评论