我将window.location
保存到变量但是当window.location
更改(History.js)时,我的变量也会更改,为什么?我没有在第一页请求之外的任何地方设置我的变量。
(function(){
var myvar = window.location;
History.Adapter.bind(window, 'statechange', function(){
console.log(window.location.pathname);
console.log(myvar.pathname); // same as window.location.pathname but should be saved data from line 2
var state = History.getState(),
options = {
url: state.url,
type: 'get',
success: function(resp, status, xhr) {
$('#wrapper').html(resp);
}
};
$.extend(options, callbackOptions);
$.ajax(options);
});
$(document).on('click', 'a[data-pjax]', function(e){
e.preventDefault();
var self = $(this),
callback = self.attr('data-pjax');
History.pushState({ "callback" : callback }, 'Loading page...', self.attr('href'));
});
})();
我加载了该页面,当前location.pathname
为/foo
,我点击了pjax链接,我的新网址为/bar
。当我这样做时,为什么myvar
会改变?我没有更改变量的代码。
答案 0 :(得分:9)
typeof window.location "object"
location
是对象的引用。将值赋给某个东西时,您将分配该引用。从对它的所有引用都可以看到对象的更改。
如果要保留以前的状态,则需要复制不可变值。您似乎只关心pathname
,这是一个字符串......
typeof window.location.pathname "string"
...所以请存储它。