初步了解了闭包之后,有几点感受:
1.使用闭包的时候需要把声明格式改成表达式格式
即function student(){};
student();
改成(function student(){})();或者(function(){}()),用运算符也行。
2.作用域和上下文
分为函数作用域和全局作用域,当函数被调用的时候才会产生上下文,将对应的变量值保存在上下文中,低级上下文找不到要用到的变量值时,就需要去调用上级的变量值。
函数每调用一次就会产生一个上下文。
如function student(){
}
var stu=student();
var stu1=student();
var stu=student();
var stu1=student();
看起来似乎stu和stu1都是执行了student函数,但是他们两个产生的上下文不是同一个上下文。
3.最疑惑的一个点
当在函数作用域找不到对应的i的时候,去全局作用域找。
如function student(){
for(var i=0;i<5;i++){
var f=function(){
console.log(i);
}
return f;
}
}
最开始本以为是打印出来 0 1 2 3 4,最后才知道是5 5 5 5 5,才发现f函数的作用域里面没有i,只有是上一级作用域里面去找。
而i在student作用域里一瞬间就变成了5,因此拿到的是5,所以打印5个5。