for(var i=0;i<n;i++)(
function(){
if(timers[i]) clearTimeout(timers[i]);
var j=i;
timers[i]=setTimeout(function(){ele.scrollLeft=x+Math.round(d*Math.sin(Math.PI*(j+1)/(2*n)));},(i+1)*t);
}
)();
到底for()(function(){...})()是什么意思?望大家详细解析下,谢
function(){
if(timers[i]) clearTimeout(timers[i]);
var j=i;
timers[i]=setTimeout(function(){ele.scrollLeft=x+Math.round(d*Math.sin(Math.PI*(j+1)/(2*n)));},(i+1)*t);
}
)();
到底for()(function(){...})()是什么意思?望大家详细解析下,谢
(function(){...})()是闭包,在循环内定义完同时使用
我们说,JavaScript的对象中的私有属性其实就是环境中的非持久型变量,而在构造函数内用this.foo = function(){…}形式定义的方法其实也是闭包的一种创建形式,只是它提供的是一种开放了“外部接口”的闭包: 例22.5 闭包和面向对象<html><head> <title>Example-22.5 闭包和面向对象</title></head><body><script><!-- function dwn(s) { document.write(s + "<br/>"); } //定义一个Foo类型 function Foo(a) { function _pC() //私有的函数 { return a; }//公有的函数,通过它产生的闭包可以访问对象内部的私有方法_pC() this.bar = function(){ dwn("foo" + _pC() + "!"); } } var obj = new Foo("bar"); obj.bar(); //显示Foo bar!--></script></body></html> 执行结果如图21.22所示:图22.2 闭包和面向对象22.2.4 其他形式的闭包
JavaScript的闭包不仅仅只有以上几种简单的形式,它还有其他更加“诡异”的形式,例如: 例22.6 闭包的其他形式<html><head> <title>Example-22.6 闭包的其他形式</title></head><body><script><!—//测试函数,异步计数function test(){ for (var i = 0; i < 5; i++) { //如果没有这个闭包,不能正确得到0,1,2,3,4的结果 //因为setTimeout是在循环结束后才被“异步”调用的 (function(j){ setTimeout(function(){alert(j)}, 100); })(i); }}test();--></script></body></html>这个例子我们曾经见到过,function(j){setTimeout(function(){alert(j)}, 100);}是一个闭包,它访问test()的调用环境,而function(){alert(j)}也是一个闭包,它又访问由外部闭包提供的环境。这样的闭包使用法经常被用在异步的环境中,用来将特定的引用“绑定”给闭包。例如,下面的用法通过闭包环境绑定修正了事件注册时的“this”指针:button1.onclick = (function(owner){return function(){button1_click.apply(owner,arguments)}})(button1);
function(){}();
这样形式的是直接执行了该函数体了。
各位能就我上面的代码讲解下吗,讲述我上面代码是怎么样一步一步执行的