【发布时间】:2016-04-10 21:37:01
【问题描述】:
我正在构建自己的 jQuery 插件,并且想知道 $ 对象的更改如何在 IIFE 之外持续存在:
(function($){
//plugin
}(jQuery);
所以我玩了一个 JS REPL,发现对象和数组的更改在 IIFE 之外仍然存在,但字符串的更改不会:
var obj={a:1,b:2};
(function(obj){obj.c=3})(obj);
**obj**
{ a: 1, b: 2, c: 3 }
arr=[1,2]
[ 1, 2 ]
(function(arr){arr.push(3)})(arr);
**arr**
[ 1, 2, 3 ]
str='aoeu'
'aoeu'
(function(str){str+='aoeu'})(str);
**str**
'aoeu'
有人可以向我解释一下对象、数组和字符串之间的区别吗?
【问题讨论】:
-
因为字符串是原始的,函数中的
str对函数之外的str有不同的引用。这意味着+=运算符永远不会触及外部标识符的值。如果你熟悉其他语言,如果typeof foo; // "object"则参数为ByRef,否则为ByVal -
这与 IIFE 无关;您可能需要修正问题的标题。
标签: javascript pass-by-reference pass-by-value