需要通过return的方式把要调用的函数返回给外部。
比如:
<script>
var ta = (function(){//定义一个闭包匿名函数。
return function(){//返回匿名函数内部的匿名函数给ta
alert('1')
}
})()
ta()//执行ta,弹出信息1
</script>
补充:
闭包是指有权访问另一个函数作用域中的变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量。这种写法就是闭包的写法,闭包内部的函数如果不是return方式,在外部无法获取,无法进行调用。
扩展资料:
Function函数与Sub过程类似。但 Function函数可以有返回值。可以使用参数。如果 Function函数没有任何参数,则 Function语句必须要包含空括号。 Function函数通过函数名返回一个值。返回值的数据类型是Variant.
语法: Function 函数名 (参数1,参数2,...)
...
End Function
Function函数是包含在Function和End Function语句之间的一组VBScript语句。
参考资料来源:百度百科-Function函数
在A函数中嵌套B函数,B函数访问A函数中的变量。将A函数复制给C函数并执行。
那么在大多数的理解中,包括许多著名的书籍,文章里都以函数C的名字代指这里生成的闭包。而在chrome中,则以执行上下文A的函数名代指闭包。
而我的理解是:闭包更准确的说是一项技术或者一个特性:只要运用具备阻止垃圾回收机制回收和突破作用域链限制的技术,就是闭包。像是《JavaScript权威指南》打的比方,像是把变量包裹了起来,形象的称为“闭包”。
如果非要指明哪个函数是闭包的话,我愿意将A函数称为定义闭包的函数,C函数为执行闭包的函数。
a. 在函数内部创建新的函数;
b. 新的函数在执行时,访问了函数的变量对象。
c. 闭包是在函数被调用执行的时候才被确认创建的。
一句话总结:==函数中闭包判定的准则,即执行时是否在内部定义的函数中访问了上层作用域的变量。==
闭包,阻止垃圾回收机制。
闭包,突破作用域链接。
《你不知道的JS中》的示例:
模块模式需要具备两个必要条件:
1.必须有外部的封闭函数,该函数必须至少被调用一次(每次调用都会创建一个新的模块实例)。
2.封闭函数必须返回至少一个内部函数,这样内部函数才能在私有作用域中形成闭包,并且可以访问或者修改私有的状态。
什么时候使用模块模式?
如果必须创建一个对象并一某些数据对其进行初始化,同时还要公开一些能够访问这些私有数据的方法,那么就可以使用模块模式。
哪些地方有用到模块模式?
最典型的就是JQuery库,jQuery和$标识符就是JQuery模块的公共API,但它们本身都是函数(由于函数也是对象,它们本身也可以拥有属性)
以后单独拿一个章节,来具体讲讲现在的模块化和未来的模块化机制。
具体的内容在函数的柯里化的章节中详细分析。
戳此传送门
输出6的原因是:被封闭在一个共享的全局作用域中,实际上只有一个i。
依次输出1-5的原因是:在迭代内部使用IIFE(立即表达函数)为每个迭代生成一个新的作用域,将外部变量的值传递进去并被引用(阻止垃圾回收机制回收),使得每个回调函数都能访问到正确值的变量。
戳此传送门
写这个文章也是为了回顾下闭包的只是点,其实许多前端对闭包都有点一知半解,包括我自己也是。
闭包函数:声明在一个函数中的函数,叫做闭包函数。
闭包:内部函数总是可以访问其所在的外部函数中声明的参数和变量,即使在其外部函数被返回(寿命终结)了之后。其实闭包在我看来就是变量作用域的。
let c = test()其实就是将test函数运行的结果赋值给c,其返回的是d方法
执行后的结果是30,因为正常来说a和b其实是局部变量,只作用于test函数。而c()的运行环境并没有变量a和b,其实这就是b包。由于在javascript中,只有函数内部的子函数才能读取局部变量,所以说,闭包可以简单理解成“定义在一个函数内部的函数“。
所以,在本质上, 闭包是将函数内部和函数外部连接起来的桥梁 。
1、是前面提到的 可以读取函数内部的变量
2、是 让这些变量的值始终保持在内存中 ,不会在调用后被自动清除。
闭包的注意事项:
1、由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。 解决方法是,在退出函数之前,将不使用的局部变量全部删除。
2、闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。
在网上看到了一道练习题,跟this指向也有关系,可以看下
var name = "The Window"
var object = {
name : "My Object",
getNameFunc : function(){
return function(){
return this.name
}
}
}
alert(object.getNameFunc()())