以下关于jQuery源码中,createOptions函数的问题,求解释~

var optionsCache = {};

// Convert String-formatted options into Object-formatted ones and store in cache
function createOptions( options ) {
var object = optionsCache[ options ] = {};
jQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) {
object[ flag ] = true;
});

return object;
}
createOptions('once momery');
这个函数执行后,为什么optionsCache[ options ]={once:true,momery:true},我想知道的是他为什么和object的值一样,可是我在each外单独改变object的值,optionsCache[ options ]却不跟着改变??

慕妹3146593
浏览 177回答 1
1回答

ibeautiful

var object = optionsCache[ options ] = {};这里是一个指针引用,两个对象指向同一个地方,所以给object赋值等同于给optionsCache赋值。你在each外单独给object赋值,是重新赋值一个对象给它,改变了引用,两个指针指向已经不是同一个地方,故optionsCache不会改变。如果想在each外通过改变object对象来修改optionsCache值,应该是通过改变属性的方法如object["once"]=false;这样optionsCache的值会同时改变。举个指针对象的例子如下:var temp = { name: "temp" };var temp2 = temp;temp = { name: "not temp2" }; //修改了temp的引用temp === temp2; //falsevar temp = { name: "temp" };var temp2 = temp;temp.name = "alsotemp2"; //修改的只是指针指向的实例本身temp === temp2; //true
打开App,查看更多内容
随时随地看视频慕课网APP