加上了注释就好懂了:
var add =function () {
var counter = 0;
window.alert("父方法"); // 只有在 add 赋值时执行一次
return function () {
window.alert("子方法"); // 每次执行 add() 都会执行
return counter += 1;
}
// counter 作用域在父函数中, 自然在其子函数中也能使用,但因为
// 子函数还需要使用了count, 所以 count 不随着父函数一起释放。
// 利用在 function(){}() 的形式自动执行一遍父匿名函数, 赋给 add 子方法。
}();
function myFunction(){
document.getElementById("demo").innerHTML = add(); //这里add()执行的就是子方法
}
<p>局部变量计数。</p>
<button type="button" onclick="myFunction()">计数!</button>
<p id="demo">0</p>
var add =function () {
var counter = 0;
window.alert("父方法"); // 只有在 add 赋值时执行一次
return function () {
window.alert("子方法"); // 每次执行 add() 都会执行
return counter += 1;
}
// counter 作用域在父函数中, 自然在其子函数中也能使用,但因为
// 子函数还需要使用了count, 所以 count 不随着父函数一起释放。
// 利用在 function(){}() 的形式自动执行一遍父匿名函数, 赋给 add 子方法。
}();
function myFunction(){
document.getElementById("demo").innerHTML = add(); //这里add()执行的就是子方法
}
发表评论 取消回复