1. 程式人生 > >通過經典題目來理解多種閉包實現方式

通過經典題目來理解多種閉包實現方式

在之前的文章中也有提及此題,這裡更詳細的說一下。

需求:生成十個按鈕,內容分別是1~10,點選每個按鈕輸出當前的序號,即點選1輸出1。

for (var i = 1; i <= 10; i++) {
    var doc = document.createElement('button');
    doc.innerHTML = i;

    //錯誤寫法
     doc.onclick = function() {
       console.log(i);
     }

    //方法一
    // doc.onclick = function() {
    //     console.log(this.toString());
// }.bind(i); //方法二 // doc.onclick = function (x) { // return function () { // console.log(x); // } // }(i); //方法三 // doc.onclick = function() { // var x= i; // return function () { // console.log(x); // } // }() //方法四 arguments.callee指向匿名函式自身,此方法系統消耗最小
// (doc.onclick = function() { // console.log(arguments.callee.x); // }).x = i; //方法五 // doc.dataset.value = i; // doc.onclick = function(){ // console.log(this.dataset.value); // }; document.body.appendChild(doc); }