在 JavaScript 中发送参数作为参考

Send params as reference in JavaScript

javascript 中有没有一种方法可以通过引用发送 var 并在函数内部对其进行初始化。

例如:

function init(param){param = function(){}}
var undefinedVar;
init(undefinedVar);

undefined var 将在此次调用后保留 undefined

我知道只有对象被跨函数发送作为 ex 的参考:

function init(param){param.attr='';}
var objectVar = {}
init(objectVar);

之后 objectVar 的值将是 {attr:""}

有人知道强制非对象变量执行此行为的方法吗?

谢谢

在 JavaScript 中只有基本类型(字符串、布尔值、数字、空值、未定义)按值传递。 但是数组和对象是通过引用传递的。

使用数组:

function init(param){param.push('hello')}
var undefinedVar =[];
init(undefinedVar);
console.log(undefinedVar); // print ['hello']

有对象:

function init(param){param['test'] = 'init'}
var undefinedVar = {};
init(undefinedVar);
console.log(undefinedVar); // print {test : 'init'}

他们是一些谈论它的帖子:

Javascript by reference vs. by value

希望对您有所帮助。

我发现最 "similar" 模拟通过引用发送的方式是访问父作用域的上下文,将 var 名称的引用作为字符串发送:

var undefinedVar, undefinedVar2, undefinedVar3;

function init() {
  for(var i=0; i<arguments.length; i++){
    this[arguments[i]] = new Function();
  }
}
init('undefinedVar', 'undefinedVar2', 'undefinedVar3');

这对于在函数内初始化或验证参数很有用。

例如,不必像这样重复代码

(function myContext(arg1, arg2, arg3){
  if(!arg1 || (typeof(arg1)!='function')){
    arg1 = new Function();
  }
  if(!arg2 || (typeof(arg1)!='function')){
    arg2 = new Function();
  }
  if(!arg3 || (typeof(arg1)!='function')){
    arg3 = new Function();
  }
  console.log(arguments);  
})()

我们可以做以下事情

function init(context) {
  for(var i=1; i<arguments.length; i++){
    if(!context[arguments[i]] || (typeof(arg1)!='function'))
      (context[arguments[i]] = new Function());
  }
}

(function myContext(arg1, arg2, arg3){
  init(arguments, 'arg1', 'arg2', 'arg3');
  console.log(arguments);  
})()

这会打印

arg1:ƒ anonymous() arg2:ƒ anonymous() arg3:ƒ anonymous()

这有助于避免在这种情况下重复代码。