Skip to content
New issue

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

JS 函数中参数传递的方式 #5

Open
yeojongki opened this issue Jun 20, 2019 · 0 comments
Open

JS 函数中参数传递的方式 #5

yeojongki opened this issue Jun 20, 2019 · 0 comments

Comments

@yeojongki
Copy link
Owner

yeojongki commented Jun 20, 2019

JS 函数中参数传递的方式

函数参数的传递方式为值传递,而这里又分原始类型和引用类型

  • 原始类型:值传递。在函数体内修改参数值,不会影响到函数外部的值
  • 引用类型:内存指针的值。在函数内部修改参数,将会影响到原始值

原始类型

var num = 1
function add(num) {
  num += 1
}
add(num)
console.log(num) // 1

上述代码中,全局变量num是一个原始类型的值,传入到函数中为值传递。因此在函数内部num为全局变量的复制(拷贝),复制后两个变量完全独立,无论怎么修改都不会影响到原始值(全局变量num)。

引用类型

var obj = { name: 'obj' }
function change(obj) {
  obj.name = 'new obj'
}
change(obj)
console.log(obj) // new obj

上述代码中,全局变量obj是一个引用类型的值,传入到函数中的是原始值的地址,因此在函数中修改了obj,原始值也会改变。

特别注意: 如果函数内部修改的不是参数对象的某个属性,而是替换掉整个参数,这时不会影响到原始值。

var outObj = { name: 'outObj' }
function change(obj) {
  obj = {name: 'innerObj'}
}
change(outObj)
console.log(outObj) // outObj

上述代码中,在函数change中,参数对象obj被整体替换成另一个值,此时不会影响到原始值。因为这个时候直接修改了obj的指针的值(在堆中开辟了一个新的对象),然后把这个新的地址赋给obj,并不会影响到全局变量outObj的指向。

参考:

@yeojongki yeojongki changed the title JS函数中参数传递的方式 JS 函数中参数传递的方式 Jun 20, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant