<!DOCTYPE html><html><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width" /><title>函数调用</title></head><body><script type="text/javascript">// 函数的调用有传值调用、传址调用、传函数调用等方式。//// - 传值调用,顾名思义就是将参数的值传递给函数,而函数在进行调用时会复制这个值,然后将复制的值在函数中进行运算,如果这个被复制的值在函数体内发生了改变,不会影响原值,传值调用所传入的参数均为简单类型,包括数字、字符串、布尔型变量、字符等;//// - 传址调用,就是将参数的内存地址传给函数进行调用,当此参数在函数体内被改变,原值也会发生改变,传址调用所转入的参数必须是复合类型,包括数组、对象等;//// - 传函数调用,是函数既可以作为返回值返回,也可以作为一个参数传入另一个函数中。// 在下面的实例中,分别展示了传值调用和传址调用两种方式的显示内容,可以看到:// [source,javascript,linenums]// ----function fun1(str) {str = "你好";}var a = "hello";fun1(a);console.log(`传值调用 a = ${a}`); // <1>function fun2(person) {person.name = 'River';}var b = {name: "Swot"};fun2(b);console.log(`传址调用 b.name = ${b.name}`); // <2>// ----// <1> 变量 a 在 fun1() 中被赋值为"你好",但打印出的 a 值依然是 hello// +// ....// 传值调用 a = hello// ....// <2> 对象 b 在 fun2() 中 name 值从 "Swot" 被修改为 "River",所以就打印出了 "River"// +// ....// 传址调用 b.name = River// ....//// .小结:// NOTE: 这说明简单类型的字符串作为函数参数执行的是传值调用,而复合类型的对象作为函数参数执行的是传址调用。// 在下面实例中,展示的是传函数调用方式。//// 函数调用过程中,如果传入的调用函数名不同,则执行不同的函数体。//// - 当传入 add 时,执行第一个函数,两数相加,返回相加结果;// - 当传入 times 时,执行第二个函数,两数相乘,返回相乘结果。//// 由此可以看出,函数作为参数有很多灵活的应用方式。// [source,javascript,linenums]// ----function add(a, b) {return a + b;}function times(a, b) {return a * b;}function operation(a, b, fun) {return fun(a, b);}var rs1 = operation(3, 5, add);console.log("rs1:", rs1); // 8var rs2 = operation(3, 5, times);console.log("rs2:", rs2); // 15// ----</script></body></html>
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。