闭包 IIFE

115 阅读1分钟

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)  // 不报错 如果括号里面是不是空 ,如果是就报错