V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
cs5117155
V2EX  ›  JavaScript

js 全局变量,F5 刷新页面依旧保持上次值的?

  •  
  •   cs5117155 · 2020-09-22 18:01:55 +08:00 · 2799 次点击
    这是一个创建于 1523 天前的主题,其中的信息可能已经有所发展或是发生改变。
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        
        <script type="text/javascript">
           var name;
    
           if(!name){
               name =  Math.random();
               console.log(name);
               if(!name || name=='null'){
                   name = '游客';
               }
           }
           console.log(name);
        </script>
    </head>
    </html>
    
    

    为何 js 全局变量,多次 F5 刷新页面后,name依旧保持上次的随机值. 能否在 https://developer.mozilla.org/ 这里找到对应解释

    11 条回复    2020-10-29 10:07:18 +08:00
    zhs227
        1
    zhs227  
       2020-09-22 18:03:44 +08:00
    是因为 Math.random 的返回不变的原因?
    crystom
        2
    crystom  
       2020-09-22 18:10:38 +08:00   ❤️ 1
    原因是 window.name 是一开始就有的。https://developer.mozilla.org/en-US/docs/Web/API/Window/name 你把变量换个名字。
    KuroNekoFan
        3
    KuroNekoFan  
       2020-09-22 18:12:40 +08:00
    window.name 应该是一个 `tab` 的 metadata
    zhs227
        4
    zhs227  
       2020-09-22 18:14:26 +08:00
    回复太随意了,Math.random 没问题,浏览器有问题。在 Mac 上,用 Chrome 每次都一样,用 Safari 会不一样。
    yyfearth
        5
    yyfearth  
       2020-09-22 18:33:26 +08:00
    @cs5117155 @zhs227 window.name 的值在不关闭窗口的情况下 一般都会保留
    有些隐私模式浏览器可能会对这个值清空
    cs5117155
        6
    cs5117155  
    OP
       2020-09-22 18:33:36 +08:00
    @crystom 确实换个名字就可以了
    en20
        7
    en20  
       2020-09-22 18:47:32 +08:00 via iPhone
    我遇到过,不要用 name
    soulmt
        8
    soulmt  
       2020-09-22 18:55:35 +08:00
    @zhs227 试了以下 safari 刷新也是一样的
    shentibeitaokong
        9
    shentibeitaokong  
       2020-10-08 23:27:43 +08:00
    @zhs227 Safari 和 Chrome 的表现一致,都是对 name 这个特殊的变量值不变,不知道你的 safari 是什么版本
    zhs227
        10
    zhs227  
       2020-10-08 23:49:52 +08:00
    @soulmt @shentibeitaokong 用的楼主的代码,开了调试模式,用 safari 尝试了几次刷新,开着 Console 刷新,看打印。console.log 会不一样。我没用 F5 刷新+页面显示,可能不太严谨。

    https://imgur.com/FtdZift

    Safari 版本号 Version 12.1.1 (14607.2.6.1.1)
    xingguang
        11
    xingguang  
       2020-10-29 10:07:18 +08:00
    F5 刷新是除了 webpack 热更新最浅的刷新了,很多数据都会缓存的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2329 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 01:49 · PVG 09:49 · LAX 17:49 · JFK 20:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.