<body> <!-- 1.将函数作为另一个函数的返回值 2.将函数作为实参传递给另一个函数调用 --> <script> //1.将函数作为另一个函数的返回值 function fn1(){ var a = 2 function fn2(){ a++; console.log(a) } return fn2 } var f = fn1() //闭包产生了 f() //3 f是调用内部函数,不是外部函数 f() //4 //请问整个过程中创建几个内部函数对象?一个!!! 内部函数是执行函数,并不是创建函数 //看闭包对象创建几个,就看你外部函数对象执行几次,因为创建外部函数对象,才会去创建内部函数对象,和内部函数执行几次没有关系,也就是和f()执行几次没有关系。因为执行外部函数时,执行了内部的函数定义,产生了变量。 //2.将函数作为实参传递给另一个函数调用 function showDelay(msg,time){ setTimeout(function(){ alert(msg) },time) } showDelay('fds',2000) //内部函数function(){alert(msg)}闭包里面有msg,如果没有msg,就没有闭包 </script> </body>
看闭包对象创建几个,就看你外部函数对象执行几次,因为创建外部函数对象,才会去创建内部函数对象,和内部函数执行几次没有关系,也就是和f()执行几次没有关系。因为执行外部函数时,执行了内部的函数定义,产生了变量。