闭包
- 是通过调用函数,产生临时的内存空间
- js是一门脚本语言,加载js有两个步骤: 1.加载定义(预加载) 2.执行代码
- 加载定义: var a; //定义对象
- function m(); //定义方法
- 闭包特性:闭包中的变量,外部不能访问(保护内部,防止变量污染)
----------------------------------------------------------------------------------
匿名函数: (function(){} () )
有名函数: var util=function(){}
----------------------------------------------------------------------------------
区别: function fun() { console.log(1) } fun();//调用
var fun=function(){ console.log(1) }
两者结果都是打印出 1 。 但两者有何区别呢???
其实就是就是前者开辟一个栈空间,而后者先开辟堆空间,再开辟栈空间 ,共开辟两个空间
jquery库源码解析后其实就是我们熟悉的闭包: ( function() {} () ),有兴趣可以去试试
-----------------------------------------------------------------------------------
闭包例子帮助理解什么是闭包:
闭包具有就近原则,先找离自身最近的对象,如果找不到会像冒泡事件,一层一层往外层查找,直到找到对象。同时外部无法改变内部的属性。
var golbal="nike"
(function(golbal,tag){
console.log(golbal);
console.log(tag);
}(window,123))
//打印结果: window
123
再来一个案例:
var util=(function(){ //var util是暴露接口,已便调用传入
return:{
sayname:function(name){
console.log('hello ,'+name)
}
}
}())
util.sayname("Arthur")
//打印结果 hello , Arthur
--------------------------------------------------------------------------------------
怎么说呢,闭包是个好东西,要多使用,你会发现现在大多数人写js都是使用闭包的方法。因为它具有良好的特性。