有没有办法判断函数参数是作为文字还是作为变量传递?

sha*_*hal 6 javascript

我有一个功能:

function hello(param){ console.log('param is '+param); }
Run Code Online (Sandbox Code Playgroud)

还有两个电话.第一:

hello(123)
Run Code Online (Sandbox Code Playgroud)

第二:

var a=123; hello(a);
Run Code Online (Sandbox Code Playgroud)

hello函数中是否有任何可能的方法来判断paramvar作为字面值还是作为字面值传递?

注意:我不是试图解决这个问题.当然有很多解决方法,我只是想创建一个漂亮的日志记录功能.并且还想学习JavaScript的界限.我有这个想法,因为在JavaScript中我们有奇怪和意想不到的功能,比如通过调用function.toString以及解析返回的文本来获取函数参数名称的能力.

san*_*lus 6

不,数字这样的原语在Javascript中按值传递.该值将复制到函数中,并且与原始函数无关.

编辑:如何使用object包装器来实现这样的目标?我不确定你到底想做什么.

您可以定义一个包含objects您想要跟踪的数组,并检查它是否在那里:

var registry = []  // empty registry
function declareThing(thing){  
   var arg = { value: thing }    // wrap parameter in an object 
   registry.push(arg)    // register object
   return arg;     //return obj
}
function isRegistered(thingObj){  
   return (registry.indexOf(thingObj) > -1)
}

var a = declareThing(123); 
hello(a);

function hello(param){ 
    console.log(isRegistered(param)); 
}
Run Code Online (Sandbox Code Playgroud)

  • 嗯,这意味着,无论值来自何处,都会将其复制到单独的内存位置.无论哪种方式,您最终都会得到完全相同的独立值.例如,如果要传递一个对象,则至少可以比较包含相同引用的原始变量,并看到它也存储在那里,而不是直接在函数参数中声明. (3认同)