Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 一、var
- 1.变量声明
- 1.变量会被提升至函数顶部
- var func = [];
- for(var j = 0; j < 10; j ++) {
- func.push(() => {
- console.log(j)
- })
- }
- func[7]() // 10
- var func = [];
- for(var i = 0; i < 10; i++) {
- (function(j){
- func.push(() => {
- console.log(j)
- })
- })(i)
- }
- func[5]()
- 二、let
- 1.块级作用域
- 2.不会被提升至函数顶部,但是是否说就不存在变量提升
- let func = [];
- for(let i = 0; i < 10; i++) {
- func.push(() => {
- console.log(i)
- })
- }
- func[5]() // 5
- 三、const
- 1.块级作用域
- 2.不会被提升至函数顶部
- 3.不能被用于普通for循环,可以被用于for-in或者for-of
- for(const i = 0; i < 10; i ++){} // 报错
- const obj = {
- a: true,
- b: true
- }
- for(const key in obj) { // 没有问题
- console.log(key
- }
- 四、全局变量
- var定义的变量,在全局环境下面,会自动覆盖window上面的属性,而let和const定义的变量,不会成为window上面的属性,屏蔽同名属性,例:
- var a = 1;
- console.log(a === window.a)
- var Array = 123 // 此时Array就被覆盖了, new Array就会报错
- console.log(Array === window.Array)
- let a = 1
- console.log(window.a === a) // false
- var Array = 123
- console.log(Array === window.Array) // false
- new window.Array() // 没有问题
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement