复杂的闭包实例
在一个函数中定义另一个会使闭包变得更加复杂。例如:
var iBaseNum = 10;
function addNum(iNum1, iNum2) {
function doAdd() {
return iNum1 + iNum2 + iBaseNum;
}
return doAdd();
}
这里,函数 addNum() 包括函数 doAdd() (闭包)。内部函数是一个闭包,因为它将获取外部函数的参数 iNum1 和 iNum2 以及全局变量 iBaseNum 的值。 addNum() 的最后一步调用了 doAdd(),把两个参数和全局变量相加,并返回它们的和。
这里要掌握的重要概念是,doAdd() 函数根本不接受参数,它使用的值是从执行环境中获取的。
可以看到,闭包是 ECMAScript 中非常强大多用的一部分,可用于执行复杂的计算。
JavaScript Function对象
// var func = new Function("console.log('我是动态创建的函数');console.log(1);");
// func(); // 会把Function() 中最后一个参数当做函数体执行。
// 类似 eval()函数,可以将字符串当做代码(函数体)来执行。
//Function这个构造函数 可以用来创建函数对象
//语法:
//0.一个参数都不传的情况 创建的就是一个空的函数
//var 函数名 = new Function()
//1.只传一个参数的情况 这个参数就是函数体
//var 函数名 = new Function("函数体")
//2.传多个参数的情况,最后一个参数为函数体,前面的参数都是该函数的形参名
//练习:使用Function创建一个打印4句歌词的函数
// var func = new Function("console.log('4句歌词');");
// func();