We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
参考: JavaScript深入之参数按值传递, by冴羽;Neal_yang
基本类型: 存储简单的数据段,一般为Number, String, Boolean, undefined, null
引用类型: 由多个键值对构成的对象, Object
在《JavaScript高级程序设计》第三版 4.1.3,讲到传递参数:
ECMAScript中所有函数的参数都是按值传递的。
var value = 1; function foo(v) { v = 2; console.log(v); //2 } foo(value); console.log(value) // 1
理解: 当传递 value 到 函数 foo 中时,相当于拷贝了一份 value, 函数修改的是拷贝值,不改变原来的value
传递对象的引用,函数内部对参数的任何改变都会影响该对象的值,因为两者引用的是同一个对象。(我的理解是 传递的是个地址)
var obj = { value: 1 }; function foo(o) { o.value = 2; //修改对象 o 中 value 的值 console.log(o.value); //2 } foo(obj); console.log(obj.value) // 2
按共享传递是传递对象的引用的副本
对象的引用的副本
var obj = { value: 1 }; function foo(o) { o = 2; //直接修改了o的指向 console.log(o); //2 } foo(obj); console.log(obj.value) // 1
参数如果是 基本类型 是按值传递,如果是 引用类型 按共享传递。
例子:
function setName(obj) { obj.name = "Neal"; //1. 内部局部变量obj存的是person的内存地址,通过这个地址可以找到`person对象本身`并对其进行修改 obj = new Object(); //2. 用一个新的对象的内存地址赋值给obj, obj失去对person的引用, 但person对象本身已存有键值对 obj.name = "yang"; } var person = new Object(); setName(person); console.log(person.name); //Neal
The text was updated successfully, but these errors were encountered:
No branches or pull requests
参考: JavaScript深入之参数按值传递, by冴羽;Neal_yang
变量可分为什么类型?
基本类型: 存储简单的数据段,一般为Number, String, Boolean, undefined, null
引用类型: 由多个键值对构成的对象, Object
传递方式
按值传递
在《JavaScript高级程序设计》第三版 4.1.3,讲到传递参数:
理解: 当传递 value 到 函数 foo 中时,相当于拷贝了一份 value, 函数修改的是拷贝值,不改变原来的value
引用传递
传递对象的引用,函数内部对参数的任何改变都会影响该对象的值,因为两者引用的是同一个对象。(我的理解是 传递的是个地址)
共享传递
按共享传递是传递
对象的引用的副本
总结:
参数如果是 基本类型 是按值传递,如果是 引用类型 按共享传递。
例子:
The text was updated successfully, but these errors were encountered: