Advertisement
Guest User

Untitled

a guest
Apr 24th, 2019
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.32 KB | None | 0 0
  1. 一、var
  2. 1.变量声明
  3. 1.变量会被提升至函数顶部
  4. var func = [];
  5. for(var j = 0; j < 10; j ++) {
  6. func.push(() => {
  7. console.log(j)
  8. })
  9. }
  10. func[7]() // 10
  11.  
  12. var func = [];
  13. for(var i = 0; i < 10; i++) {
  14. (function(j){
  15. func.push(() => {
  16. console.log(j)
  17. })
  18. })(i)
  19. }
  20.  
  21. func[5]()
  22.  
  23.  
  24. 二、let
  25. 1.块级作用域
  26. 2.不会被提升至函数顶部,但是是否说就不存在变量提升
  27. let func = [];
  28. for(let i = 0; i < 10; i++) {
  29. func.push(() => {
  30. console.log(i)
  31. })
  32. }
  33.  
  34. func[5]() // 5
  35.  
  36.  
  37. 三、const
  38. 1.块级作用域
  39. 2.不会被提升至函数顶部
  40. 3.不能被用于普通for循环,可以被用于for-in或者for-of
  41. for(const i = 0; i < 10; i ++){} // 报错
  42.  
  43. const obj = {
  44. a: true,
  45. b: true
  46. }
  47. for(const key in obj) { // 没有问题
  48. console.log(key
  49. }
  50.  
  51.  
  52. 四、全局变量
  53. var定义的变量,在全局环境下面,会自动覆盖window上面的属性,而let和const定义的变量,不会成为window上面的属性,屏蔽同名属性,例:
  54. var a = 1;
  55. console.log(a === window.a)
  56.  
  57. var Array = 123 // 此时Array就被覆盖了, new Array就会报错
  58. console.log(Array === window.Array)
  59.  
  60. let a = 1
  61. console.log(window.a === a) // false
  62.  
  63. var Array = 123
  64. console.log(Array === window.Array) // false
  65. new window.Array() // 没有问题
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement