① js中函數的參數是按值傳遞還是按引用傳遞
js中,參數傳遞只有一種規則:按值傳遞,基於值的復制
② js 怎麼把方法當參數傳遞給方法
直接把方法名做為函數參數專就可以屬<script>
function callfn(f)
{
f();
}
function test()
{
alert("this a test!");
}
callfn(test);
</script>
③ js 函數中如何傳遞數組參數
js的數組都有一個toString方法,變成數組中的元素加逗號這種方式,這樣你就可以完全把數組當字元串用了,在接收頁面用arr.split(",")就可以將字元串再轉回為數組
<script>
var arr=[1,23,34,5];
var strArr = arr.toString();
document.write(strArr);
var getArr = strArr.split(",");
for(var i=0;i<getArr.length;i++){
document.write(getArr[i]+"|");
}
</script>
④ javascript函數傳參問題
你說js函數的傳參是按值傳遞,應該是看到《js高級》裡面作者這么說的吧,其實有不少人對作者的觀點提出了質疑,有的人覺得如果參數是引用類型,那麼就是按引用傳遞的,還有一種說法叫「按共享傳遞」。
我個人偏向於的觀點是:如果參數是js基本數據類型,那麼就是按值傳遞;如果是引用類型如對象、數組、函數,那麼就是按引用傳遞。用這個觀點去解釋你的例子,應該是沒有矛盾的地方的。①處按照js對象的比較運算規則,只有全等號(據說比較對象時,「===」和「==」是沒有區別的)兩側的變數指向的是同一個對象的引用,才返回true,即按引用傳遞。在「peo = {...}」這一行,實際上是創建了一個函數內的局部對象,開辟了新的內存地址,並將peo變數指向該處,而之前的person變數指向的對象不變,故而②比較的是兩個指向不同對象的變數,返回false。
你可以這么去理解js函數傳參的過程:js解析器在分析js的函數聲明代碼時,如果函數有帶參數,實際上是在開始時加了一行代碼:var 參數1,參數2...;即將參數隱性的聲明為函數的局部變數,沒有賦值(下面的函數例子可以說明這點,第一個函數雖然聲明是有形參,但是調用執行時沒有傳參,即a只聲明未賦值,所以是undefined;第二個函數的a不存在,所以報錯)。等到函數真正被調用,傳進來實參的時候,只是將實參變數賦給了形參變數,比如你的例子中,函數調用執行時會自動加一句:peo = person;即兩個不同的變數指向了同一個對象,這自然就是按引用傳遞。
functionaa(a){
console.log(a)
}
aa()//輸出undefined
functionab(){
console.log(a)
}
ab()//報錯,UncaughtReferenceError:aisnotdefined
⑤ 比如有個定義函數是 js(x,y,z){} 我想向他只傳遞y參數,其他不變,應該怎麼做
在Javascript中, 函數定義的參數個數, 與調用時傳入的參數個數,是可以不同的.
一般情況下,在定義函數時,將必須傳入的參數放在前面, 可選的參數放在後面.在函數體內部需要對參數的傳入情況作判斷,以防參數不存在時程序出錯.
例如
function js(x, y, z) {
this.x = x || 0;
this.y = y || 0;
this.z = z || 0;
}
調用時可以傳入0-3個參數都不會出錯,但傳參的順序是已經定了的.
比如:
var A = new js(); //A.x=0, A.y=0, A.z=0
var A=new js(5, 3); //A.x=5, A.y=3, A.z=0
如果只想傳遞參數y, 則必須傳遞兩個參數,其中第一個可傳入null或0
如x是可選y是必選,建議在定義函數時改變形參的順序
⑥ JavaScript 函數參數傳遞問題
1 同樣都是值傳遞為什麼可以給對象加屬性?
當參數為對象是,就不只是值傳遞而是引用專傳遞了屬。所以楞以通過obj.name改變原對象的屬性。
2 還有後面的var obj是把前一個obj覆蓋了嗎?
是的,當你再次var obj=new Object()的時候,會讓js引擎將obj作為一個新的變數,參數obj在後面的代碼中已經無效了。
3 左邊錯誤沒有輸出。右邊正常,變數聲明放在使用的後面只有值類型的變數可以嗎?
在js中,變數的聲明永遠都需要放在變數使用前,右邊的結果參見上面2的說明。左邊出錯,是因為在執行到kk.name = 5的時候,會先檢查變數kk是否存在,若不存在,當然不能調用它的name屬性了,所以後面的代碼都不會再執行。而在右邊,kk=5相當於var kk = 5;所以可以在後面使用alert(kk)輸出,但是再後面的代碼 var kk 則會覆蓋前面的kk變數(也就是說kk不再是5,而是一個新的變數了)。
⑦ javascript如何給事件處理函數傳遞參數
在js中,函數名加括弧的時候就會自動執行,簡單的加上參數也會自動執行。
也就是說window載入專的時候就執行代碼屬了,意味著給事件添加這種自定義函數的時候只能執行一次,所以傳遞參數只能間接執行,解決方案如下:
不直接將函數名賦予給事件,而是將你自定義的函數函數+參數放在事件函數的裡面,這樣就事件觸發你的函數就能重復執行了。
functiona(b){alert(b)};
letb="helloword!";
document.onclik=function(){
a(b);//間接傳遞參數
}