鍍金池/ 問答/HTML/ 怎么才能修改的是函數(shù)外面?zhèn)魅氲淖兞?

怎么才能修改的是函數(shù)外面?zhèn)魅氲淖兞?

請問下,怎么才能修改的是函數(shù)外面?zhèn)魅氲淖兞?,而不是修改copy的那一份。

function minus_num(num) {
  num -= 1
}

var a = 10

while (num > 0){
  minus_num(num)
}

console.log(a)  // 這里我想得到0,但是這里是無限循環(huán)
回答
編輯回答
淺淺

使用對象的方式傳參:

function minus_num(obj) {
  obj.num -= 1
}

var obj = {num: 10};
var a = 10

while (obj.num > 0){
  minus_num(obj)
}

console.log(a, obj) 
2018年2月9日 18:56
編輯回答
哚蕾咪

向函數(shù)中傳入引用類型的變量,且函數(shù)中不直接賦值,僅僅修改的話,可以達到你要的效果。
基本類型的變量 傳進去的是拷貝一份副本,引用類型變量傳進去的是引用地址

2017年8月7日 19:55
編輯回答
陌南塵

基本類型[number,string,boolean]不能實現(xiàn)在函數(shù)里的修改,引用類型可以,比如object,array

2017年8月31日 22:55
編輯回答
念初

通過函數(shù)修改傳進來的變量,一個是不在函數(shù)內(nèi)部定義改變量,讓函數(shù)通過作用域去找到改變量并且修改。
還有一個就是通過函數(shù)的返回值,賦值給改變量。
這里是因為函數(shù)傳參時,基本類型的話,是按值傳遞。題目中的a的數(shù)值被復制給了num,但是num的改變不會影響到a的變化。這點和寫c或者c++之類的代碼時不太一樣。。
所以代碼可以這樣,不過不推薦這樣寫函數(shù)。通過返回值的,之前有人回答了,就不寫了。

function minus_num(num) {
    a -= 1
}

var a = 10

while (a > 0) {
    minus_num()
}

console.log(a)
2017年12月21日 09:01
編輯回答
晚風眠
function minus_num(num) {
  return num - 1
}

var a = 10

while (num > 0){
  a = minus_num(num)
}

console.log(a)  
2018年1月3日 13:07
編輯回答
扯不斷
function minus_num(num) {
  return num - 1
}

var a = 10

while (num > 0){
  num = minus_num(num)
}

console.log(a)  
2017年5月19日 04:56