国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

javascript閉包的使用之按鈕切換功能

2024-05-06 15:30:55
字體:
來源:轉載
供稿:網友

閉包實現按鈕狀態切換

看下面的代碼:

var toggleBtn = document.getElementById('toggle');var toggleFun = (function() { var checked = true; return function() {  var color = checked ? 'red' : 'white';  toggleBtn.style.backgroundColor = color;  checked = !checked; };})();// 切換按鈕toggleBtn.addEventListener('click', toggleFun);

解釋

上面的代碼實現了點擊按鈕切換樣式的功能,它用到了js的閉包特性。簡單解釋下:

toggleFun為一個立即執行函數,執行后toggleFun被賦值為內部函數:

 toggleFun = function() {   color = checked ? 'red' : 'white';   toggleBtn.style.backgroundColor = color;   checked = !checked; }

這個函數用到了外部函數的checked變量,這也是checked變量在立即執行函數執行完成后未被銷毀的原因,因為還有其他地方用到了它。那么這個內部函數被用作事件監聽器的回調函數,每點擊一次就會被調用一次,從而可以通過更改checked的值來實現按鈕切換效果。立即執行函數內的函數被全局下的toggleFun變量引用了,這就創建了一個閉包。

簡而言之,閉包的作用就是在立即執行函數執行完并返回后,使得javascript的垃圾回收機制不會收回立即函數所占用的資源,因為立即執行函數的內部函數依賴立即執行函數中的變量。

額,上面寫的太啰嗦了,下面把代碼稍微改下,加些注釋就會更加清晰:

var toggleBtn = document.getElementById('toggle');var outerFun = function() { var checked = true; // innerFun聲明時用到了outerFun的局部變量 var innerFun = function() {  var color = checked ? 'red' : 'white';  toggleBtn.style.backgroundColor = color;  checked = !checked; }; return innerFun;};var toggleFun = outerFun(); // toggleFun指向innerFun// 切換按鈕,每次點擊都會調用innerFuntoggleBtn.addEventListener('click', toggleFun);

不用閉包,用全局變量

其實不用閉包也能實現按鈕切換,不過就得用到全局變量來存儲按鈕狀態:

var toggleBtn = document.getElementById('toggle');var checked = true; // 全局變量存儲按鈕狀態var toggleFun = function() { var color = checked ? 'red' : 'white'; toggleBtn.style.backgroundColor = color; checked = !checked;};toggleBtn.addEventListener('click', toggleFun);

但全局變量用多了會不好維護,代碼不好控制。

補充:JavaScript閉包的概念及用法

1.閉包的概念: 

 閉包就是能夠讀取其他函數內部變量的函數.

 例如:  

function f1(){    var n=999;    function f2(){      alert(n);     }    return f2;  }  var result=f1();  result(); // 999            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 徐闻县| 富民县| 临西县| 资兴市| 华池县| 汾西县| 金寨县| 霍山县| 青海省| 鸡西市| 天柱县| 枣庄市| 平凉市| 冕宁县| 岗巴县| 合水县| 新宁县| 汝城县| 定边县| 蓬安县| 盐津县| 凌海市| 兴隆县| 巨鹿县| 陇川县| 弋阳县| 凯里市| 永靖县| 虎林市| 大丰市| 合肥市| 将乐县| 长沙县| 灯塔市| 抚顺县| 翁牛特旗| 曲周县| 泌阳县| 建宁县| 铁岭市| 双辽市|