① 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);//间接传递参数
}