a函数和b函数 操作的是同一个变量 num
function test() {
var num = 100
function a() {
num ++
console.log(num)
}
function b() {
num --
console.log(num)
}
return [a, b]
}
var myArr = test()
myArr[1]() // 99
myArr[0]() // 100
复制代码
小应用
function eater() {
var food = ""
var obj = {
eat: function () {
console.log('i am eating ' + food + ' // eat 和 push 方法形成闭包 操作的是同一个 food')
},
push: function (myFood) {
food = myFood
}
}
return obj // 返回obj, e1保存的是eater()执行的值, e1就可以调用obj里面的方法
}
var e1 = eater()
e1.push('banana')
e1.eat() // 形成闭包 操作的是同一个 food
复制代码
IIFE
// 立即执行函数的返回值
var result = (function (a, b, c) {
var d = a + b * c
return d
})(1, 2, 3);
console.log(result)
var test = function () {
console.log(1)
return '随便返回一个'
}()
console.log(test)
// function mytest2() {
// console.log('a + b + c + d')
// }(1) // 不报错 如果括号里面是不是空 ,如果是就报错
复制代码