我正在使用closure來隱私。 我不明白爲什麼以及如何從封閉外部改變局部變量。從閉包變化的局部變量。這是一個JavaScript錯誤或我做錯了什麼?
我寫了一個腳本給你解釋問題。
var MyAjax=(function(){
//Create a local variable for privacy
var _opts={
cache:true
}
,getDefaultOptions=function(){
return _opts
};
//return only getDefaultOptions function
return {
getDefaultOptions:getDefaultOptions
}
})()
//I am merging new ajax options with default options.
var defaults=MyAjax.getDefaultOptions();
var reqOptions= $.extend(defaults,{cache:false});
// I am getting expected result
console.log("extended var",reqOptions) //{cache:false}
// I am getting non expected result
// I should get {cache:true} but I am getting { cache:false }
console.log("defaults",MyAjax.getDefaultOptions()) //{cache:false}
爲什麼會發生這種情況?
$ .extend用false覆蓋'defaults.cache',這就是extend的作用。 – jbabey 2012-07-25 12:42:26
變更默認變量normal.But我再次調用MyAjax.getDefaultOptions()但將緩存返回爲false。 – 2012-07-25 12:50:49
「JavaScript總是按值傳遞,但是當一個變量引用一個對象(包括數組)時,」值「是對該對象的引用。」 http://stackoverflow.com/questions/6605640/javascript-by-reference-vs-by-value – jbabey 2012-07-25 13:03:23