html注冊事件向引用方法中的傳參問題,兩個方式:?
創新互聯是一家專注于成都做網站、網站設計與策劃設計,珠山網站建設哪家好?創新互聯做網站,專注于網站建設10余年,網設計領域的專業建站公司;建站業務涵蓋:珠山等地區。珠山做網站價格咨詢:028-86922220
html?
head?
script?
function?bbb(event){?
event?=?window.event?||?event;?
var?srcEle?=?event.target?||?event.srcElement;?
alert(srcEle.value);?
}?
function?ccc(cc){?
alert(cc.value);?
}?
/script?
/head?
body?
input?type="text"?value="用event方式"?onblur="bbb()"/?
input?type="text"?value="對象傳遞"?onblur="ccc(this)"/?
/body?
/html
你說js函數的傳參是按值傳遞,應該是看到《js高級》里面作者這么說的吧,其實有不少人對作者的觀點提出了質疑,有的人覺得如果參數是引用類型,那么就是按引用傳遞的,還有一種說法叫“按共享傳遞”。
我個人偏向于的觀點是:如果參數是js基本數據類型,那么就是按值傳遞;如果是引用類型如對象、數組、函數,那么就是按引用傳遞。用這個觀點去解釋你的例子,應該是沒有矛盾的地方的。①處按照js對象的比較運算規則,只有全等號(據說比較對象時,“===”和“==”是沒有區別的)兩側的變量指向的是同一個對象的引用,才返回true,即按引用傳遞。在“peo = {...}”這一行,實際上是創建了一個函數內的局部對象,開辟了新的內存地址,并將peo變量指向該處,而之前的person變量指向的對象不變,故而②比較的是兩個指向不同對象的變量,返回false。
你可以這么去理解js函數傳參的過程:js解析器在分析js的函數聲明代碼時,如果函數有帶參數,實際上是在開始時加了一行代碼:var 參數1,參數2...;即將參數隱性的聲明為函數的局部變量,沒有賦值(下面的函數例子可以說明這點,第一個函數雖然聲明是有形參,但是調用執行時沒有傳參,即a只聲明未賦值,所以是undefined;第二個函數的a不存在,所以報錯)。等到函數真正被調用,傳進來實參的時候,只是將實參變量賦給了形參變量,比如你的例子中,函數調用執行時會自動加一句:peo = person;即兩個不同的變量指向了同一個對象,這自然就是按引用傳遞。
function?aa(a)?{
console.log(a)
}
aa()?//輸出undefined
function?ab()?{
console.log(a)
}
ab()?//報錯,Uncaught?ReferenceError:?a?is?not?defined
方法一:通過事件在html中的內聯方式來傳遞參數(假定變量x是參數,下同):
input?type="button"?value="點我"?onclick="var?x=123;test(x);"/
script
function?test(x){
alert(x);
}
/script
方法二:通過全局變量來傳遞參數:
input?id="abc"?type="button"?value="點我"/
script
var?x=123;
window.onload=function(){
document.getElementById("abc").onclick=function(){
alert(x);
}
}
/script
方法三:通過對象的自定義屬性來傳遞參數:
input?id="abc"?type="button"?value="點我"/
script
window.onload=function(){
var?abc=document.getElementById("abc");
abc.x=123;
abc.onclick=function(){
alert(this.x);
}
}
/script
方法四:利用閉包:
input?id="abc"?type="button"?value="點我"/
script
window.onload=function(){
(function(x){
document.getElementById("abc").onclick=function(){
alert(x);
}
})(123);
}
/script
暫時就想到這么多了,肯定還有其他方法的。
本文題目:javascript傳參,js方法傳參有幾種方式
文章URL:http://vcdvsql.cn/article30/dsdeopo.html
成都網站建設公司_創新互聯,為您提供外貿建站、網站改版、網站收錄、標簽優化、動態網站、做網站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯