箭头函数和普通函数的区别
(...rest)
var obj = {
a: 10,
b: () => {
console.log(this.a); // undefined
console.log(this); // Window {postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, frames: Window, …}
},
c: function() {
console.log(this.a); // 10
console.log(this); // {a: 10, b: ƒ, c: ƒ}
}
}
obj.b(); // window
obj.c(); // 10
复制代码
var a = ()=>{
return 1;
}
function b(){
return 2;
}
console.log(a.prototype); // undefined
console.log(b.prototype); // {constructor: ƒ}
复制代码
if(true) {
let a = 'name'
}
console.log('a',a) // a is not defined
变量提升指的是变量声明的提升,不会提升变量的初始化和赋值。
function fn() {
console.log('a', a);
var a = 1;
function a () {
console.log('I am a function');
}
}
fn() // ƒ a () {console.log('I am a function');}
复制代码
使用 let 的时候
function fn1() {
console.log('a', a);
let a = 1;
function a () {
console.log('I am a function');
}
}
fn1();
VM1868:4 Uncaught SyntaxError: Identifier 'a' has already been declared
复制代码
不能修改值,const 声明的变量必须经过初始化。
以上 let 的规则同样适用于 const,但是跟 let 的区别是 const 声明的变量不能重新赋值,所以 const 声明的变量必须经过初始化。