变量包含了两种不同类型的值:
两种值在赋值上不同的是:
var person = new object(); person.name = "cat.y"; console.log('person.name = ' + person.name);
var num1 = 5; var num2 = num1; console.log('num1 = ' + num1 + '\n' + 'num2 = ' + num2); //这里应该输出: num1 = 5 num2 = 5 num2 = 10; console.log('改变num2的值后:\n') console.log('num1 = ' + num1 + '\n' + 'num2 = ' + num2); //这里应该输出: num1 = 5 num2 = 10 console.log('\n\n');
var obj1 = new object(); var obj2 = obj1; obj2.name = 'cat.y'; console.log('obj1.name = ' + obj1.name + '\n' + 'obj2.name = ' + obj2.name ); // obj1.name = cat.y obj2.name = cat.y
函数中的参数相当于一个局部的变量
function addten(num){ num += 10; return num; } var count = 10; var result = addten(count); //输出结果应该为: count = 10 result = 20; console.log('count = ' + count + '\n' + 'result = ' + result + '\n');
例子中将一个数值赋值给变量count,再新建一个变量result, result 的值是调用了函数addten并将count做为参数传了进去而返回的值
也就是说,result的值是经过addten函数计算而返回的一个新的值;
函数外,count并不会改变,因为它是相当于变量count的值赋值给了局部变量num,num改变的值是不会影响到count的
再例:
function setname(obj){ obj.name = 'cat.u'; obj = new object(); //在函数内重新给obj赋值了一个新的对象,指向的地址改变 obj.name = 'tuanzi.y'; //影响不到函数外的值 } var person = new object(); console.log('person.name = ' + person.name + '\n'); //这时候还没给peron.name赋值 setname(person); console.log('person.name = ' + person.name + '\n'); //person.name = cat.u
如果调用一个函数时,将一个对象作为参数传了进去,这里要注意的是,它传递的是“指向这个内存的地址”,是地址而不是值,也就是“门牌号”
如果在函数内重新给obj变量赋值一个新的对象,obj指向的内存地址改变,那之后更改对象内的属性,对函数外是没影响的
如对本文有疑问, 点击进行留言回复!!
轻松解决 org.apache.taglibs.standard.tlv.JstlCoreTLV 困惑
vert实践五——Json?Protocol Buffer?FlatBuffers?
[基于tensorflow的人脸检测] 基于神经网络的人脸检测8——验证训练好的神经网络
selenium + ajax抓取英雄联盟全部英雄的详细信息及多线程保存全部皮肤图片到本地
网友评论