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

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

見注釋里的提問,問題還是給某個事件調用函數加不加括號的問題;

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>practice</title>

<style type="text/css">

*{margin:0px;padding:0px;}

#div1 {position:relative;left:-200px;width:200px;height:200px;margin-top:50px;background-color: pink;}

#share{background-color:lightblue;width:20px;height:50px;position: absolute;left:200px;top:75px;}

</style>

<script type="text/javascript">

window.onload=function(){

var div1=document.getElementById("div1");

/*div1.onmouseover=startMove; */ /*不加括號,就是正常的,鼠標放上,開始移動;*/

div1.onmouseover=startMove(); /*為什么加了括號之后,一打開就開始移動,鼠標不放上去也是移動的;*/


};

var timer=null;

function startMove(){

var div1=document.getElementById("div1");

timer=setInterval(

function(){

if(div1.offsetLeft==0){clearInterval(timer)}

else {div1.style.left=div1.offsetLeft+10+'px'}}

? ,30);

}


</script>

</head>

<body>


<div id="div1">

<span id="share">分享</span>

</div>

</body>

</html>


正在回答

4 回答

首先弄清楚startMove; 和startMove();區別,第一個是函數本身,第二個是函數執行的結果。

假設a = b + c,那此公式會先計算b+c再賦值給a。

我們看div1.onmouseover=startMove();,先計算startMove(),那么此時已經運行了startMove函數并執行了函數,所以一打開就會看到物體移動的現象。而我們看div1.onmouseover=startMove;是將函數代碼本身賦值給前面,當鼠標經過的時候,div1.onmouseover會變成如下所示:

div1.onmouseover=?function?startMove(){
????var?div1=document.getElementById("div1");
????timer=setInterval(function(){
????????if(div1.offsetLeft==0){clearInterval(timer)}
????????else?{div1.style.left=div1.offsetLeft+10+'px'}
??????},30);
};

如同,div1.onmouseover = function(){ alert("aaa");},成功執行函數。

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

慕粉18221508921 提問者

跟我想法一樣,大概是理解了,可能還不準確
2016-11-20 回復 有任何疑惑可以回復我~

div1.onmouseover=startMove; /*不加括號,就是正常的,鼠標滑過,開始移動,表示鼠標滑過,調用這個函數*/

div1.onmouseover=startMove();

/*加了括號之后,一打開就開始移動,表示,把函數執行的結果給div1的鼠標滑過事件,所以會去先執行函數,因為函數執行的結果就是offsetLeft==0,然后把這個結果給div1的鼠標滑過事件,所以會出現一打開就跑,這是為了得到函數執行的結果*/

這樣解釋對不對?


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

函數名加括號表示調用并執行該函數,你alert一下有括號和沒括號,alert(startMove),,,alert(startMove())

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

函數名加括號表示調用并執行該函數,你alert一下有括號和沒括號,alert(startMove),,,alert(startMove())

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

舉報

0/150
提交
取消
JS動畫效果
  • 參與學習       113916    人
  • 解答問題       1502    個

通過本課程JS動畫的學習,從簡單動畫開始,逐步深入各種動畫框架封裝

進入課程

見注釋里的提問,問題還是給某個事件調用函數加不加括號的問題;

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

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

幫助反饋 APP下載

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

公眾號

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