如上不能給g賦值一個新值,我想寫一個fn函數,可以任意給外部的變數賦值
#實際需求如上,我要將實例化後的變數賦值給外部
題主沒理解的一個概念,就是函數參數的傳遞方式的問題。
var g = 1; function fn(a){a=2;} fn(g); g//1 //我是分割线 var g = {a:1}; function fn(b){b.a=2;} fn(g); g//{a:2}
當外部變數作為參數傳入函數時,你需要理解兩種情況,一個是基本資料類型,一個是物件。
參數為基本資料型別時,函數裡參數傳的是值傳遞,也就是把值拷貝到參數去,函數怎麼對參數值做改動,也只是對實參的拷貝做改動,不會影響到本體,如你截圖所示。
而當參數是對象的時候,我其實也認為是值傳遞,只是傳遞的是對象的引用地址值,函數內部對這個引用對像地址進而索引到真實數據對象,然後去改變對象內的屬性,這個就是會影響到外在的情形。
一般來說,你如果想任何給外部的變數賦值。你倒不如不以傳參的方式去傳遞變量,而是直接在函數體內做處理。
var g; function fn(){ g = 1; } fn(); g//1
根據function找出變數規則,先在本次執行體內查找變數是否有g,如果沒有再往外層找,直到最外層還沒有,那就是這個變數沒定義沒聲明過了。
javascript的函數參數傳遞都是」值傳遞「。
一個比較合理寫法是
var g; function fn() { return 33 } g = fn();
不太合理的寫法
var g; function fn() { g = 33; } fn();
後者不太合理的原因三在於耦合程度太高。
var g; function fn(){ g = '32'; } fn();
這個能完成你需要的,但是你應該是要個通用的吧?
你可以选择这样: var g; function fn(){ return '32'; } g = fn();
雷雷
var g;function fn(value){ g = value;}fn(1);g//1
題主沒理解的一個概念,就是函數參數的傳遞方式的問題。
當外部變數作為參數傳入函數時,你需要理解兩種情況,一個是基本資料類型,一個是物件。
參數為基本資料型別時,函數裡參數傳的是值傳遞,也就是把值拷貝到參數去,函數怎麼對參數值做改動,也只是對實參的拷貝做改動,不會影響到本體,如你截圖所示。
而當參數是對象的時候,我其實也認為是值傳遞,只是傳遞的是對象的引用地址值,函數內部對這個引用對像地址進而索引到真實數據對象,然後去改變對象內的屬性,這個就是會影響到外在的情形。
一般來說,你如果想任何給外部的變數賦值。你倒不如不以傳參的方式去傳遞變量,而是直接在函數體內做處理。
根據function找出變數規則,先在本次執行體內查找變數是否有g,如果沒有再往外層找,直到最外層還沒有,那就是這個變數沒定義沒聲明過了。
javascript的函數參數傳遞都是」值傳遞「。
一個比較合理寫法是
不太合理的寫法
後者不太合理的原因三在於耦合程度太高。
這個能完成你需要的,但是你應該是要個通用的吧?
雷雷
var g;
function fn(value){
g = value;
}
fn(1);
g//1