资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

javascript传递,js传递函数

JavaScript 函数参数传递到底是值传递还是引用传递

JavaScript 函数参数传递到底是值传递还是引用传递

目前成都创新互联已为上1000家的企业提供了网站建设、域名、虚拟主机、网站托管、服务器托管、企业网站设计、昌都网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

一 参数

1 所有的参数传递,都是传递值的拷贝。(如果想知道为什么,去学习编译原理的函数调用的参数压栈和出栈对应内容)。

2 C传指针进去,其实也是把这个指针值按拷贝传送进去。但是因为指针值指向一块外部内存空间(其实更多是堆空间,或外层栈变量空间),所以感觉可以在函数里改变外部变量。其实本质还是按拷贝传递,只是传递进去的是一个访问变量的渠道。

因此,如果我们希望函数内能改变外部的指针值,往往传进去的是指针变量的指针。呵呵,很多初学C的程序员,对**非常难理解。

二 返回值

返回值是按拷贝传递,函数出栈后,会传出一个值,该值在调用函数的代码段的生命周期里一直有效。相当与调用点形成一个匿名的栈变量。

变量a = function(); 而a并不等于函数里return的那个值。

其实function()执行结果自身就是一个匿名变量。(其实编译器会检查语法,如上面a=function这样的语法,匿名变量不会生成,直接使用a变量拷贝返回值)

例如: function()返回int值。 完全可以 int x = function() + 6;//注意:+运算时,函数已经执行完毕,所有函数出栈操作已经结束。

很明显function()必须有一个变量或常量参与计算,而函数里return的值会随函数调用结束出栈而被删除,所以必须拷贝构造传递出来。

关于javascript的引用传递

javascript函数参数是值传递,不是地址传递,所以Sum函数中调用change(x,y,z);并不会影响x,y,z的值,也就是Sum函数中change(x,y,z);没有一点作用,当然结果是2+3+5不是4+5+10。

javascript如何给事件处理函数传递参数

方法一:通过事件在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:如何把方法作为参数传递

1、定义二个方法

function k1(){//定义一个函数k1

alert('k1');

}

function k2(p){//定义一个函数k2,参数为方法

p();//执行参数表示的函数

}

2、k1作为参数,传递到k2中

k2(k1);//把k1作为参数传入到k2中,这里执行后会弹出 "k1"


分享题目:javascript传递,js传递函数
分享网址:http://cdkjz.cn/article/dsdcocp.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220