개인 정보 보호를 위해 폐쇄를 사용하고 있습니다. 클로저 외부에서 로컬 변수를 변경하는 이유와 방법을 이해할 수 없습니다.클로저의 로컬 변수가 바깥 쪽에서 바뀌고 있습니다. 이것은 자바 스크립트 버그이거나 잘못된 것입니까?
설명 문제에 대한 스크립트를 작성했습니다.
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가'defaults.cache'를 false로 덮어 쓰고 있습니다. 이것이 확장 기능입니다. – jbabey
defaults 변수의 변경 normal.But MyAjax.getDefaultOptions()를 다시 호출하지만 캐시를 false로 반환합니다. –
"자바 스크립트는 항상 값으로 전달되지만, 변수가 객체를 참조하면 (배열 포함)"값 "은 객체에 대한 참조입니다." http://stackoverflow.com/questions/6605640/javascript-by-reference-vs-by-value – jbabey