首頁  >  問答  >  主體

javascript - 在函數內部怎麼給函數外部的變數賦值?


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

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

淡淡烟草味淡淡烟草味2709 天前2613

全部回覆(5)我來回復

  • PHPz

    PHPz2017-05-19 10:41:36

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

    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,如果沒有再往外層找,直到最外層還沒有,那就是這個變數沒定義沒聲明過了。

    回覆
    0
  • 習慣沉默

    習慣沉默2017-05-19 10:41:36

    javascript的函數參數傳遞都是」值傳遞「。

    一個比較合理寫法是

    var g;
    function fn() {
        return 33
    }
    g = fn();
    

    不太合理的寫法

    var g;
    function fn() {
        g = 33;
    }
    fn();
    

    後者不太合理的原因三在於耦合程度太高。

    回覆
    0
  • 大家讲道理

    大家讲道理2017-05-19 10:41:36

    var g;
    function fn(){
        g = '32';
    }
    fn();

    這個能完成你需要的,但是你應該是要個通用的吧?

    你可以选择这样:
    var g;
    function fn(){
        return '32';
    }
    g = fn();

    回覆
    0
  • ringa_lee

    ringa_lee2017-05-19 10:41:36

    雷雷

    回覆
    0
  • 我想大声告诉你

    我想大声告诉你2017-05-19 10:41:36

    var g;
    function fn(value){
    g = value;
    }
    fn(1);
    g//1

    回覆
    0
  • 取消回覆