首页  >  问答  >  正文

javascript - 在函数内部怎么给函数外部的变量赋值?


如上不能给g赋值一个新值,我想写一个fn函数,可以任意给外部的变量赋值

实际需求如上,我要将实例化后的变量赋值给外部

淡淡烟草味淡淡烟草味2709 天前2616

全部回复(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
  • 取消回复