亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

為什么賦值寫在函數里就不起作用了?

? ? 如下代碼中, 把 li[i].index=i寫在onmouseover的函數里(不是for循環中),代碼就沒有效果了,這是為什么呢?

<script type="text/javascript">

? ? ? window.onload=function(){

? ? ? var p=document.getElementsByTagName("p");

? ? ? var li=document.getElementsByTagName("li");

? ? ? for(var i=0; i<li.length;i++){

? ? ? li[i].index=i;

? ? ? li[i].onmouseover=function(){

? ? ? for(var i=0; i<li.length;i++){

? ? ? li[i].className="";

? ? ? p[i].className="hide";

? ? ? }

? ? ? this.className="active";

? ? ? p[this.index].className="show"; ? ? ?

? ? ? }

? ? ? }

? ? }

? ? </script>


正在回答

4 回答

?這里面li[i].onmouseover=function()相當于

<li onmouseover="a"> <!--第i+1個li-->

function a(){}

把?li[i].index=i;寫到里面,其實并沒有i的值,所以下面li[i]都是用this,代表li[i]該對象,可以這樣嘗試一下,分別把

this.index=0 ? this.index=1 ??this.index=2,放到onmouseover的函數里,就會只顯示序號對應的圖像

0 回復 有任何疑惑可以回復我~
#1

慕圣9424722 提問者

謝謝,是不是寫在某個函數外面的賦值不能對這個函數起作用?
2017-08-27 回復 有任何疑惑可以回復我~
#2

慕運維3393194 回復 慕圣9424722 提問者

抱歉,我好像說錯了,onload函數被執行后,for循環依次將3個onmouseover函數處在可觸發狀態,在for循環結束后,i的值便被解放,所以當自己觸發onmouseover函數時,i的值已經不存在了,但是onload函數里聲明的p、li還是存在的。。。(我也是初學者,瞎猜的,僅供參考)。
2017-08-28 回復 有任何疑惑可以回復我~
#3

慕運維3393194 回復 慕運維3393194

for循環依次將三個<li>與onmouseover函數連起來,當其中一個<li>觸發時,便會執行該函數。(僅供參考)
2017-08-28 回復 有任何疑惑可以回復我~

可能是作用域的關系 ???li[i].index=i寫在函數里 作用范圍就只在函數內部 ?外部無法調用

0 回復 有任何疑惑可以回復我~

別的問題不知道,首先你的for循環都是循環i就不對

0 回復 有任何疑惑可以回復我~
#1

慕圣9424722 提問者

那你棒棒,兩個for循環用i沒問題的
2017-08-26 回復 有任何疑惑可以回復我~
#2

Adrian_lee 回復 慕圣9424722 提問者

O.O剛剛試了,好像可以,我以前用jquery不行O.O
2017-08-26 回復 有任何疑惑可以回復我~

這應該是函數的執行環境的問題,如果寫在onmouseover的函數里,當函數執行完,執行環境被銷毀,li[i].index=i也會被銷毀,所以就沒有了,應該是,我也不是特別清楚。

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

為什么賦值寫在函數里就不起作用了?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號