【深入xx】四
深入理解JavaScript系列(4):立即调用的函数表达式
http://www.cnblogs.com/TomXu/archive/2011/12/31/2289423.html
<!DOCTYPE html><html lang="zh-CN"><head> <meta charset="utf-8" /> <title></title></head><body> <script type="text/javascript"> function makeCounter() { var i = 0; return function () { console.log(++i); }; } var counter = makeCounter(); counter(); counter(); var counter2 = makeCounter(); counter2(); counter2(); // 引用错误 alert(i); </script></body></html><!DOCTYPE html><html lang="zh-CN"><head> <meta charset="utf-8" /> <title></title></head><body> <script type="text/javascript"> // function statement requires a name //function () {alert(1);}(); // 解析成表达式了而不是声明了 var f = function () {alert(2);}(); </script></body></html><!DOCTYPE html><html lang="zh-CN"><head> <meta charset="utf-8" /> <title></title></head><body> <a href="">1</a> <a href="">2</a> <a href="">3</a> <script type="text/javascript"> var elems = document.getElementsByTagName('a'); for (var i = 0, len = elems.length; i < len; i++) { console.log(i); // 0 1 2都绑定了事件 // i加到3判断不成立了,但i是3 elems[i].addEventListener('click', function (e) { e.preventDefault(); alert('I am link #' + i); }, 'false'); // 相当于 /*elems[0].addEventListener('click', function (e) { e.preventDefault(); alert('I am link #' + i); }, 'false'); elems[1].addEventListener('click', function (e) { e.preventDefault(); alert('I am link #' + i); }, 'false'); elems[2].addEventListener('click', function (e) { e.preventDefault(); alert('I am link #' + i); }, 'false');*/ } </script></body></html><!DOCTYPE html><html lang="zh-CN"><head> <meta charset="utf-8" /> <title></title></head><body> <a href="">0</a> <a href="">1</a> <a href="">2</a> <script type="text/javascript"> var elems = document.getElementsByTagName('a'); // 但闭包内部的lockedInIndex值是没有改变,因为他已经执行完毕了 for (var i = 0, len = elems.length; i < len; i++) { console.log(i); (function (lockedInIndex) { elems[i].addEventListener('click', function (e) { e.preventDefault(); alert('I am link #' + 'i: ' + i + 'lockedInIndex' + lockedInIndex); }, 'false'); }(i)); } </script></body></html><!DOCTYPE html><html lang="zh-CN"><head> <meta charset="utf-8" /> <title></title></head><body> <a href="">0</a> <a href="">1</a> <a href="">2</a> <script type="text/javascript"> var elems = document.getElementsByTagName('a'); for (var i = 0, len = elems.length; i < len; i++) { elems[i].addEventListener('click', (function (i) { return function (e) { e.preventDefault(); alert('I am link #' + i); }; })(i), 'false'); } </script></body></html>TAG: