最近这几天重新复习了 js的面向对象-闭包。通过课上老师的讲解和例题,令我对闭包有了更多的认识和更深的理解。
''闭包'',可简单的理解成“定义在一个函数内部的函数“。在本质上也可以说闭包就是将函数内部和函数外部连接起来的桥梁。
按我自己的理解的话,闭包就是函数里面套着另一个函数就形成了闭包。
举例:
<script>
function a(){
console.log("1")
function b(){
console.log("2")
}
}
</script>
自执行的匿名函数
问题: 什么是匿名函数?
解答:就是把名字用~!()等特别符号命名,并放在function最前面.执行时直接用()不用名称。
请看例子
下面这个例子是我完成的一个面向过程的拖拽效果
注意:当你函数套函数的时候,函数中的this肯定会改变。这是我完成拖拽效果中所忽略的问题.后来经过老师的讲解可以通过缓存你需要的this var _this=$("this")
——图中;function($){
})()
就是自执行的匿名函数的写法
举例:
;(function($) {
$.fn.center = function(options) {
var defaults = {
}
var options = $.extend(defaults, options);
this.each(function(){
//功能实现逻辑
$(".box").mousedown(function(e){
var el=$(this)
var isMove=true;
var div_x=e.pageX-$(".box").offset().left;
var div_y=e.pageY-$(".box").offset().top;
$(document).mousemove(function(e){
if (isMove) {
//console.log(_this)
el.offset({
"left":e.pageX-div_x,
"top":e.pageY-div_y
})
}
//console.log(e.pageX)
}).mouseup(function(){
isMove=false
})
})
})
}
})(jQuery)
匿名函数的作用
匿名函数的作用是避免全局变量的污染以及函数名的冲突。
个人理解:当团队需要共同完成某个项目的时候,可以通过匿名函数来避免重复命名。