Day09-Closure

前言

了解hoisting、scope chain对於closure的帮助会非常大,因为这三个是环环相扣。

  • 让变数留在内层
  • 保留指向的功能,也就是一直往下参考(reference)
  • 避免命名冲突覆盖资料
function closure(x) {
  function multiple() {
    return x * 2 
  }
  return multiple()
}
const result = closure(100)
console.log(result) //200

可以看到我们透过return 指向multiply,而multiple读取了closure的区域变数。

以上我们也可以使用另一种写法

function closure(x) {
  return function () {
    return x * 2 
  }
}
const result = closure(100)
console.log(result()) //200
function minus(x) {
  let value = x
  return function() {
    return value + value
  }
}
const a = minus(100)
console.log(a()) //200

看完是不是觉得当我们了解前面的作用域概念,其实闭包就迎刃而解了呢!!!

当然也有上面提到的避免function覆盖

function minus(x) {
  let value = x
  return function plus() {
    return value + value
  }
}
function plus() {
  console.log('hello')
}

const a = minus(100)
console.log(a()) //200

plus() //hello

最後总结

  • 最低曝露原则
  • 避免未宣告就使用变数
  • 让复杂的操作留在function内,并且回传最终数值即可
  • 内层往外读取数值

明天我们会进入CallBack,这是JavaScript中最重要的一个章节。

刚好今日身体已经恢复差不多,也希望各位要保重身体!!!

/images/emoticon/emoticon02.gif


<<:  视觉设计(2)

>>:  DAY7-JAVA的类别(1)

Day18 Let's ODOO: Paper Format

今天我们来介绍Report paper format,有时候我们在生成report时候想要自己自定义...

Day 5 - 如果有如果

前言 上次介绍了变数是甚麽?这次就来说明程序的一些功能吧!所以为什麽我们需要使用程序语言,为甚麽不直...

EP 13: Add/Edit the MockData in TopStore App

Hello, 各位 iT邦帮忙 的粉丝们大家好~~~ 本篇是 Re: 从零开始用 Xamarin 技...

[Day_3] Python运算子

运算子 今天这篇主要会介绍一些运算子, 不一定都是数学上的运算, 也有判断True或False的, ...

Day21 AJAX 请求方法?

大家好我是乌木白,今天要衔接昨天的内容,我们今天继续讨论AJAX! 什麽是 HTTP 请求方法? ...