[关闭]
@JunQiu 2018-12-16T17:53:19.000000Z 字数 1793 阅读 1529

动态/静态语言执行速度、Js_(链式)作用域、闭包

summary_2018/08 designIdea language_js


1、静态语言为什么比动态语言更加快???

2、javaScript的作用域/链和闭包

  1. ## Example:
  2. // 作用域
  3. // Global definition of aCentaur.
  4. var aCentaur = "a horse with rider,"
  5. // A local aCentaur variable is declared in this function.
  6. function antiquities(){
  7. var aCentaur = "A centaur is probably a mounted Scythian warrior"
  8. }
  9. antiquities()
  10. aCentaur += " as seen from a distance by a naive innocent."
  11. document.write(aCentaur);
  12. // Output: "a horse with rider, as seen from a distance by a naive innocent."
  13. // 作用域链(见下图)

  1. ## Example
  2. function f1 () {
  3. let name = 1
  4. return function () {
  5. console.log(name)
  6. }
  7. }
  8. const res = f1()
  9. res() // 1
  10. // 使变量始终驻留在内存中
  11. function f1 () {
  12. let name = 1
  13. return function () {
  14. name++
  15. console.log(name)
  16. }
  17. }
  18. const res = f1()
  19. res() // 2
  20. res() // 3
  21. // 由于f1是返回函数的父函数,返回函数赋值给一个全局变量res导致返回函数驻留在内存中,因此f1也驻留在内存中(name)。
  22. // 一个Tips:全局函数闭包
  23. function f1 () {
  24. let n = 999
  25. // 闭包函数,全局
  26. nAdd = function () {
  27. n += 1
  28. console.log(n)
  29. }
  30. // 闭包函数,局部
  31. function f2 () {
  32. console.log(n)
  33. }
  34. return f2
  35. }
  36. // 全局函数,只有一个,此时n指向result的局部变量
  37. const result = f1()
  38. result() // 999
  39. nAdd() // 1000
  40. result() // 1000
  41. // 此时n指向result1的局部变量
  42. const result1 = f1()
  43. result1() // 999
  44. nAdd() // 1000
  45. result() // 1000
  46. result1() // 1000
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注