84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
如上不能给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