javascript
javascript闭包学习
(function(){})()===>>>>函數會被立即執行function(){}是一個函數用括號包起來表示是函數表達式再加()表示函數自執行
?如何理解閉包?
1、定義和用法:當一個函數的返回值是另外一個函數,而返回的那個函數如果調用了其父函數內部的其它變量,如果返回的這個函數在外部被執行,就產生了閉包。
2、表現形式:使函數外部能夠調用函數內部定義的變量。
3、實例如下:
(1)、根據作用域鏈的規則,底層作用域沒有聲明的變量,會向上一級找,找到就返回,沒找到就一直找,直到window的變量,沒有就返回undefined。這里明顯count 是函數內部的flag2 的那個count 。
實例1:
var count=10; //全局作用域 標記為flag1 function add(){var count=0; //函數全局作用域 標記為flag2return function(){count+=1; //函數的內部作用域 alert(count);} } var s = add() //這樣寫相當于s就是匿名函數function(){count+=1; alert(count);} s();//輸出1 s();//輸出2解析:add函數的返回值是一個匿名函數,var s=add();這個時候直接輸入s就會直接執行function add(){}這個函數,那么就會返回匿名函數function(){count+=1; alert(count);} 這時候再執行一下就會輸出匿名函數里面的值
s()=====>>>add()()==>alert(count)
實例2:
函數自我調用閉包
var add = (function () {var counter = 0;return function () {return counter += 1;} })();add(); add(); add();// 計數器為 3實例解析
變量?add?指定了函數自我調用的返回字值。
自我調用函數只執行一次。設置計數器為 0。并返回函數表達式。
add變量可以作為一個函數使用。非常棒的部分是它可以訪問函數上一層作用域的計數器。
這個叫作 JavaScript?閉包。它使得函數擁有私有變量變成可能。
計數器受匿名函數的作用域保護,只能通過 add 方法修改。
轉載于:https://www.cnblogs.com/qdlhj/p/10615576.html
總結
以上是生活随笔為你收集整理的javascript闭包学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 论文阅读笔记01-attention-i
- 下一篇: vue组件间的传值方式及方法调用汇总