2013-11-15 52 views
1

我將window.location保存爲一個變量,但當window.location發生更改(History.js)時,我的變量也發生了變化,爲什麼?除了首頁請求之外,我不在任何地方設置變量。爲什麼我的保存的變量從window.location更改?

(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鏈接,我的新的URL /bar。當我這樣做時,爲什麼myvar被更改?我沒有更改變量的代碼。

回答

9
typeof window.location 
"object" 

location是對一個對象的引用。當您將其值分配給某物時,您正在分配參考。對對象的所有引用都可以看到對象的更改。

如果你想保留它的以前的狀態,那麼你需要複製不可變的值。你似乎只有約pathname關心,這是一個字符串...

typeof window.location.pathname 
"string" 

...所以商店來代替。

相關問題