javascript - 在函數內部怎麼給函數外部的變數賦值?
淡淡烟草味
淡淡烟草味 2017-05-19 10:39:36
0
5
2685


如上不能給g賦值一個新值,我想寫一個fn函數,可以任意給外部的變數賦值

#實際需求如上,我要將實例化後的變數賦值給外部

淡淡烟草味
淡淡烟草味

全部回覆(5)
PHPzhong

題主沒理解的一個概念,就是函數參數的傳遞方式的問題。

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

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板