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传递函数
URL地址:https://www.cdcxhl.com/article28/dsdcocp.html

成都网站建设公司_创新互联,为您提供商城网站网站内链品牌网站制作网站维护企业建站企业网站制作

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

微信小程序开发