先上代码再说话。<script>
var cb = document.getElementsByName("checkbox");
for(var i=0;i<cb.length;i++)
{
var c = cb[i];
!function(c)
{
c.onclick = function ()
{
}
}(c)
}
</script>真的好不懂啊。function前面干吗要感叹号?
后面跟个(c)是啥意思?
里面怎么还有一个onclick时间函数?
坐等啊……
var cb = document.getElementsByName("checkbox");
for(var i=0;i<cb.length;i++)
{
var c = cb[i];
!function(c)
{
c.onclick = function ()
{
}
}(c)
}
</script>真的好不懂啊。function前面干吗要感叹号?
后面跟个(c)是啥意思?
里面怎么还有一个onclick时间函数?
坐等啊……
这我之前解答过,就是个匿名函数~·+function(){}()
-function(){}()还能像上面这么写~·里面的c就是var c = cb[i];当前对象啊,传入function函数~·
(function(){})()
。1楼说错了!function(){}()这样也是闭包~·
// …
})();方式二void function() {
// …
}();方式三~function() {
// …
}();方式一 和 方式二 大家可能都看到过,这里主要说明下 方式三。在说明 方式三 之前,我们现回顾下运算符“~”(位取反)在 EMCAScript 中的定义(第五版的第 72 页),简单的翻译下:1. 按运算符结合语句2. 将旧值转换为 32 位整型3. 执行运算符后的语句4. 转换之行结果为 32 位整形并返回从上面可以了解,其实位运算符都能立即返回后面表达式的值。其实其他位运算符都可以达到这样的目的,例如:!function() {
// …
}();等都可以达到我们的目的。所以其实用“~”也并无其他的原因,仅仅是代码“看着好看”而已 :^)
* 方式一的写法很常见而且很保险,所以并不会有人因为你使用这种方式而责怪你* 但使用方式一的同学,可能经常会犯忘记匹配括号的“毛病”(特别是语句块很长时,就经常搞错)* 使用位运算符执行匿名函数很新潮,用来装逼酷不错* 很多 IDE (如 IDEA)以及语法高亮工具不支持 方式三 的写法* void 效率最好,但总感觉相比其他两种实现方式非常的臃肿(仅仅多几个字符?)* 综合代码量以及效率等情况考虑,用 方式一 没错的* 在需要额外节省代码的极端情况,用 方式三* 考虑效率优先,那么使用 方式二
格式类似:function(){}()