function f1(){
var n=999;
nAdd=function(){n+=1}
function f2(){
alert(n);
}
return f2;
}
var result=f1();
result(); // 999
nAdd();
result(); // 1000
在这个函数中function f2(){},其实是相当于var f2=function(){}
在外面我们和可以nAdd() 访问nAdd这个函数但是我们不能访问f2()这个函数
因为nAdd=function(){} 是想一个函数赋给一个全局变量,没有var 就是声明的全局变量,闭包没意思,我觉得就是个变量作用域的事
来看一下那个经典的面试题
"use strict";
var ul = document.getElementsByTagName('ul')[0];
var li = ul.getElementsByTagName('li');
// for (var i = 0, len = li.length; i < len; i++) {
// (function(j) {
// li[i].addEventListener('click', function() {
// alert(j);
// })
// })(i)
// }
//这个问题主要是JavaScript缺少块作用域
//这样玩
// for(var i = 0,len=li.length;i<len;i++ ){
// (function(){
// var temp = i;
// li[temp].addEventListener('click',function(){
// console.log(temp)
// })
// })()
// }
for(let i =0,len=li.length;i<len;i++){
li[i].addEventListener('click',function(){
console.log(i)
})
}