一、JavaScript闭包理解/2017-07-19
<script>
function a(){
var i = 0;
var b = function(){
console.log(i++);
}
return b;
}
var c = a();
setInterval('c()', 500); //0 1 2 3 4 5...
</script>
作用域/闭包理解/2017-08-03
<script>
function a(j){
var i = j;
var b = function(){
console.log(i);
}
//i++;
return b;
}
var c = a(0);
c(); //0
a(1); //i值不管怎么变,c里面的i已经锁死了。
c(); //0
c(); //0
</script>
二、JavaScript闭包理解/2017-08-03
<div>
<a rel="nofollow" class="mazey-example-a1">Click</a>
<a rel="nofollow" class="mazey-example-a1">Click</a>
<a rel="nofollow" class="mazey-example-a1">Click</a>
<a rel="nofollow" class="mazey-example-a1">Click</a>
<a rel="nofollow" class="mazey-example-a1">Click</a>
<a rel="nofollow" class="mazey-example-a1">Click</a>
<a rel="nofollow" class="mazey-example-a1">Click</a>
<a rel="nofollow" class="mazey-example-a1">Click</a>
<a rel="nofollow" class="mazey-example-a1">Click</a>
<a rel="nofollow" class="mazey-example-a1">Click</a>
</div>
<script type="text/javascript">
var domEles = document.getElementsByClassName('mazey-example-a1');
//正确写法 返回 0 1 2 3...
for (var i = 0, max = domEles.length; i < max; i++) {
(function(i){ //传入的i被锁定了,与外面的i作用域不一样。
//debugger;
domEles[i].addEventListener('click', function () {
alert(i);
});
}(i)); //传入i
}
//错误写法 返回 10
for (var i = 0, max = domEles.length; i < max; i++) {
domEles[i].addEventListener('click', function () {
alert(i);
});
}
</script>
示例: 检查长度/2017-08-08
长度: <input type="text" value="" name="textLen">
<script type="text/javascript">
(function(){
var textLen = document.getElementsByName('textLen')[0];
(function(obj){
obj.addEventListener('blur', function(){
if(obj.value.length > 20){
console.log('长度不能超过20位!');
}
});
}(textLen)); //这里的 textLen 与外面的同名 textLen 互不影响.
}());
</script>
三、JavaScript闭包理解/2017-08-08
(function(){
var data = [];
for (var i = 0; i < 3; i++){
data[i] = (function(j){
return function(){
console.log(j);
}
}(i));
}
data[0](); //0
data[1](); //1
data[2](); //2
}());