引用传递,传递的是内存地址,修改后会改变内存地址对应储存的值。
用数组来举例就最清楚了,例如我们定义一个数组a[]={1,2}
那么a[0]=1,a[1]=2。
如果我们把数组a里的元素值作为参数传递,实际上只是进行了值传递,对数组本身没有影响
如果我们把 数组a的指针作为参数传递,那么假如处理的函数就可以直接修改数组a里的值。
代码实例:(只是写个大概的逻辑,语法可能有错误)
main()
{
int a[]={1,2}
test(a)
printf(a[0]) //此处打印的值是3, 这就是引用传递。
}
public void test(int b[])
{
b[0]=3
}
JS求值策略有诸多争议和不同版本。对于这个问题的答案:“JS中基本类型是按值传递的,对象类型是按共享传递的。”共享传递解释为:(callbysharing,也叫按对象传递、按对象共享传递)。最早由BarbaraLiskov.在1974年的GLU语言中提出。该求值策略被用于Python、Java、Ruby、JS等多种语言。你可以自己写个demo运行下结果就知道。var a = 1function foo(x) {x = 2}foo(a)console.log(a)// 仍为1, 未受x = 2赋值所影响var obj = {x : 1}function foo(o) {o.x = 3}foo(obj)console.log(obj.x)// 3, 被修改了!首先明确一下,js里面没有指针这个说法,只有引用。所以应该是js如何传递函数的引用的。function fu(){}
这里fu就是一个函数的引用变量,而fu()则是这个函数。
var n=fu()
这是把这个函数给了n,即n也是fu()这个函数的引用变量了,他可以访问fu()里面的东西。
var n=fu;
这个属于函数的引用的传递,也表示n指向了fu()函数,但是区别是,n此时不会解析函数,而上面则会开始解析函数fu()。