我在另一个线程上被告知,在函数退出后,从函数内部对其操作数所做的任何修改都将持续存在。我一直认为它对传递给它的所有值做了一个临时副本,然后唯一保留的东西是返回值和被修改的隐式更广泛范围的变量。
我想回想一下我在其源代码中达到顶峰的所有 jquery 插件,它们都使用以下构造:
(function($){
$.fn.foo = function(){ console.log('foo'); };
})(jQuery);
这意味着jQuery
即使通过内部范围$
标识符对对象的修改在函数退出后仍然存在,否则 jQuery 插件将无法工作。所以,这就像上面的代码片段一样工作:
var x = {n:0};
(function addOneTo(p) {
p.n = p.n + 1;
})(x);
console.log(x);
但是这个:
var x = 0;
(function addOneTo(p) {
p = p + 1;
})(x);
console.log(x);
没有,保持不变,x
值为0
.
有人能解释一下参数传递是如何工作的吗?我以为我知道它是怎么做到的,但我想我不知道。谢谢