Skip to content

Latest commit

 

History

History
73 lines (52 loc) · 1.83 KB

function-scope-effect-pure.md

File metadata and controls

73 lines (52 loc) · 1.83 KB

作用域,副作用与纯函数

作用域 scope

函数经常被描述成一个黑盒。

写代码可以定义函数,每个函数有自己的作用域,简单理解成盒子的边界就是它的作用域。 盒子外的其他人是没办法访问 (access) 盒子里的东西的,但是在盒子内部,却可以访问盒子外的东西。

例一:在函数作用域内定义的一个变量,无法在作用域外访问

function scopeA() {
  var aVariable = "I'm a variable"
}

scopeA()

console.log(aVariable) // Uncaught ReferenceError: aVariable is not defined

例二:在全局作用域内定义的一个变量,可以在函数作用域里访问

var aVariable = "I'm a variable"

function scopeA() {
  console.log(aVariable)
}

scopeA() // Good

函数内部可以再定义函数,此时作用域相当于盒子里套盒子。

var pink = "I'm Mr. Pink"

function scopeA() {
  var orange = "I'm Mr. Orange"
  function scopeB() {
    console.log(pink)   // OK, pink from global scope
    console.log(orange) // OK, orange from scopeA
    var black = "I'm Mr. Black"
  }
  
  scopeB()
  console.log(black) // BAD! black from scopeB not accessible in scopeA
}

scopeA()

副作用 side effect

函数接收输入,计算输出,这就是它的主作用 (main effect)。如果除此之外,函数还额外做了对外界有影响的事情,这些事情称之为副作用。

f(x) = 先给 jaskni 打 call,然后 x + 1
function addOne(x) {
  window.alert('call jaskni')
  return x + 1
}

addOne(5)

纯函数 pure function

输出完全由它的输入决定,且没有副作用的函数称之为纯函数