为什么我在window.location中保存的变量会发生变化?

时间:2013-11-15 13:33:41

标签: javascript history.js

我将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会改变?我没有更改变量的代码。

1 个答案:

答案 0 :(得分:9)

typeof window.location
"object"

location是对象的引用。将值赋给某个​​东西时,您将分配该引用。从对它的所有引用都可以看到对象的更改。

如果要保留以前的状态,则需要复制不可变值。您似乎只关心pathname,这是一个字符串......

typeof window.location.pathname
"string"

...所以请存储它。