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閉包問題,求大神解答,js閉包問題,求大神解答!
春風化雨 首先你的 等價於下面的 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都只有那...
js中閉包是什麼意思,有什麼作用,最好舉例說明啊
司馬唐遷 e是事件,在firefox中只能在事件現場使用window.event,所以只有把event傳給函式使用。為了相容ff和其它瀏覽器,一般會在函式裡重新給e賦值 e window.event e 也就是說,如果window.event存在,則該瀏覽器支援直接使用window.event,否在...
js動態獲取id的問題,js獲取div的id值的問題
千鋒教育 html規則要求id名稱不能相同,會衝突的。如果你要選擇多個物件要用tag或者class。不要使用id屬性。常用的dom方法有 getelementsbyclassnamegetelementsbytagname getelementsbyclassname有時候會失靈,所以,getele...