我有一个功能:
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函数中是否有任何可能的方法来判断param是var作为字面值还是作为字面值传递?
注意:我不是试图解决这个问题.当然有很多解决方法,我只是想创建一个漂亮的日志记录功能.并且还想学习JavaScript的界限.我有这个想法,因为在JavaScript中我们有奇怪和意想不到的功能,比如通过调用function.toString以及解析返回的文本来获取函数参数名称的能力.
不,数字这样的原语在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)