招个网站建设维护,服务器上怎做网站,科技公司logo设计图片,招代理的网站要怎么做概念作用保护作用保存作用优缺点命名空间
概念
闭包(closure)指有权访问另一个函数作用域中变量的函数 — Javacript高级程序设计 p309 简单理解#xff0c;一个作用域可以访问另一个函数内部的私有变量
// 其中 test就是一个闭包
function fn(){var num 10function test …概念作用保护作用保存作用优缺点命名空间
概念
闭包(closure)指有权访问另一个函数作用域中变量的函数 — Javacript高级程序设计 p309 简单理解一个作用域可以访问另一个函数内部的私有变量
// 其中 test就是一个闭包
function fn(){var num 10function test () { console.log(num) }
}作用
保护作用
在上下文中会有一些私有的变量AO(XXX)这些私有变量和外界的变量不会冲突(互不影响)
应用
团队协作开发中为防止全局变量的冲突污染建议每个开发者把自己的代码放到一个闭包中(立即执行函数即可)保护起来封装一个插件或类库等防止自己定义的变量和方法与用户定义的冲突需要把所写的代码放到一个闭包中例如 Jquery
保存作用
某些情况下上下文中的某些内容被为外界占用后当前上下文并不会出栈销毁这样开一把上下文中的一些信息存储起来
应用
1.在某些需求下经常需要形成一个闭包存储一些值(且不能销毁)供后面的程序运行使用例如 惰性函数柯里化函数(bind)compose函数等
优缺点
优点保护和保存代码不受污染 缺点会产生不销毁的上下文导致栈/堆内存消耗过大也会导致内存泄露(该内存空间使用完毕之后未回收)影响页面的运行性能
命名空间
概念
给每个对象的堆内存起一个变量名这个变量就是’命名空间’
作用
避免变量函数名的冲突
var a 1
var utils { 方法... }单例设计模式 (闭包) 各板块暴露到全局只有一个变量避免全局变量的污染实现了闭包之间的方法公用性
var utils (function(){var num 10function test(){console.log(num)}//函数...return {test // 相当于 testtest// 方法...}
}())
utils.test() // 直接用命名空间 utils 调用其中方法基于 window.xxx 方法 暴露到全局 这种方法暴露到全局对象GO上也可能导致方法之间的冲突