1樓:匿名使用者
getnamefunc是物件object的內部方法,所有this=object//你怎麼可以用object做變數的?
第二個方法(getnamefunc()返回了一個函式)你並沒有繫結上下文,就放到window這個物件中了,號稱全域性變數
如果這樣
var o=
o.fun=objectx.getnamefunc()o.fun()//繫結一個上下文
js閉包的問題。
2樓:碼路行者
1、js沒有塊級作用域,定義的i變數屬於函式n中的變數,在函式n中可以訪問到;
2、函式n中主要涉及兩個執行環境: arr中儲存的函式中的區域性環境,函式n的區域性環境。相應的作用域鏈為:
arr中的函式的變數物件->函式n的變數物件。arr中的函式在執行時,作用域鏈向上查詢,自身的變數物件中沒有i這個變數,繼續向上查詢函式n的變數物件,而在經歷三次迴圈後,此時i的值已經是3,所以值為3.
3、如果要讓i為相應的數值,應該延長作用域鏈,使用匿名函式構造塊級作用域,方法如下:
function n()
})(i);
}return arr;
}var funs = n();
funs[0]();
funs[1]();
funs[2]();
js閉包問題,求大神解答! 100
3樓:春風化雨
//首先你的**等價於下面的**
function getfuns() ;
i = 1;
funs[i] = function() ;
i = 2;
funs[i] = function() ;
i = 3;
return funs;
}var arr = getfuns();
arr[0]();
arr[1]();
arr[2]();
//無論哪呼叫function();這個函式,那個i都只有那一份,//雖然i的作用域在getfuns裡面,但當你在外面用這種方式間接使用到i時,
//它的生命週期被延長。
//這樣輸出2 2 2
function getfuns() ;
}return funs;
}var arr = getfuns();
arr[0]();
arr[1]();
arr[2]();
//這樣就可以輸出0 1 2
function getfuns() ;
}return funs;
}var arr = getfuns();
arr[0]();
arr[1]();
arr[2]();
//這樣也可以輸出0 1 2
function getfuns() ;
})(i);
}return funs;
}var arr = getfuns();
arr[0]();
arr[1]();
arr[2]();//
4樓:啊桂讀書
你後面執行的三個函式,都是:function();
而當你執行時,i都是3,所以結果就這樣了。
js閉包的問題
碼路行者 1 js沒有塊級作用域,定義的i變數屬於函式n中的變數,在函式n中可以訪問到 2 函式n中主要涉及兩個執行環境 arr中儲存的函式中的區域性環境,函式n的區域性環境。相應的作用域鏈為 arr中的函式的變數物件 函式n的變數物件。arr中的函式在執行時,作用域鏈向上查詢,自身的變數物件中沒有...
js動態獲取id的問題,js獲取div的id值的問題
千鋒教育 html規則要求id名稱不能相同,會衝突的。如果你要選擇多個物件要用tag或者class。不要使用id屬性。常用的dom方法有 getelementsbyclassnamegetelementsbytagname getelementsbyclassname有時候會失靈,所以,getele...
js中刪除節點的問題
飛雲祥 你沒有操作對。div.childnodes.length 5 div.childnodes 3 才能選到 h1 元素標籤 div.removechild div.childnodes 3 加入想用div.childnodes 1 選中h1的話,html中的div需要如下寫,不要有換行,才可以...