Javascript 进阶

一. 变量提升

看以下代码, 或多或少会有些问题的.

function fn(){
    console.log(name);
    var name = '大马猴';
}
fn()

发现问题了么. 这么写代码, 在其他语言里. 绝对是不允许的. 但是在js里. 不但允许, 还能执行. 为什么呢? 因为在js执行的时候. 它会首先检测你的代码. 发现在代码中会有name使用. OK. 运行时就会变成这样的逻辑:

function fn(){
    var name;
    console.log(name);
    name = '大马猴';
}
fn()

看到了么. 实际运行的时候和我们写代码的顺序可能会不一样....这种把变量提前到代码块第一部分运行的逻辑被称为变量提升. 这在其他语言里是绝对没有的. 并且也不是什么好事情. 正常的逻辑不应该是这样的. 那么怎么办? 在新的ES6中. 就明确了, 这样使用变量是不完善的. es6提出. 用let来声明变量. 就不会出现该问题了.

function fn(){
    console.log(name);  // 直接报错, let变量不可以变量提升.
    let name = '大马猴'; 
}
fn()

==结论一, 用let声明变量是新版本javascript提倡的一种声明变量的方案.==

let还有哪些作用呢?

function fn(){
    // console.log(name);  // 直接报错, let变量不可以变量提升.
    // let name = '大马猴';
    var name = "周杰伦";
    var name = "王力宏";
    console.log(name);
}
fn()

显然一个变量被声明了两次. 这样也是不合理的. var本意是声明变量. 同一个东西. 被声明两次. 所以ES6规定. let声明的变量. 在同一个作用域内. 只能声明一次.

function fn(){
    // console.log(name);  // 直接报错, let变量不可以变量提升.
    // let name = '大马猴';
    let name = "周杰伦";
    console.log(name);
    let name = "王力宏";
    console.log(name);
}
fn()

注意, 报错是发生在代码检查阶段. 所以. 上述代码根本就执行不了.

==结论二, 在同一个作用域内. let声明的变量只能声明一次. 其他使用上和var没有差别==

二. 闭包函数(难)

2.1 定时器

setTimeout(函数名, 时间(毫秒),表示多长时间后运行此函数,注意:函数名不要带括号。

function fn(){
    console.log('测试定时器')
}
setTimeout(fn, 5000)

常见的用法

setTimeout(function (){
    console.log('我是一个匿名函数')
}, 3000)

setInterval 每隔多长时间运行一次,会一直运行;使用场景:每隔多长时间重新设置一下cookie

setInterval(function (){
    console.log('每隔一秒钟运行一次')
}, 1000)

在浏览器的控制台上可以输入window.clearInterval(s),让setInterval 代码停止运行

let s= setInterval(function (){
    console.log('每隔一秒钟运行一次')
}, 1000)

window.clearInterval(s)

2.2 时间

先扩展一个软件测试时的问题:
有时候,前端发布版本了,但是在浏览器上看到页面没有更新(还是旧版本的内容,而不是新版本的),但是前端的开发经过检查后,坚定是版本已经发布了。既然前端已经发布了新版本,那么页面的内容应该是新的才对,而为什么页面内容还是旧的呢?原因在于:浏览器对同一个URL访问的时候,会进行缓存,因为前不久访问了这个url,离现在返回的时间不长,浏览器对前面的内容进行缓存了,直接展示出来,而没有去获取最新的资源。
为了解决这个问题,可以在url后面添加一些变化的参数来确保每次访问的url是不一样的,这样浏览器就不会缓存了,问题来了,这个是要根据网页内容的需求来做的,比如一些业务要实时更新内容,如:订单页面,购物车页面等等。对于一些不是那么经常要更新内容的页面,即不需要多添加这些变化的参数,一是这样可以减少服务器访问的压力,二是可以减少服务器的流量费,三是可以提高用户体验(快速获取页面内容)减少加载时间。
而这些变化的参数可以使用随机数来实现,而是可以使用时间戳参数。

JS中时间的运用

// 这里直接在JS文件中运行,打印出来的时间少了八小时。(通过getTime()获取到的时间戳是对的)时区是0时区,要获取中国的时间,要加8小时,但是在HTML中运行时间是对的,问题还没找到,后续查询一下

function time(){
    let t = new Date()

    console.log(t)

    let yea = t.getYear()   // 这个方法要加1900,输出是122,加1900=2022(老网站)
    // console.log(yea)

    let year = t.getFullYear()
    // console.log('年份',year)

    let month = t.getMonth() + 1
    // console.log('月份', month)    //需要加1,才是当前月份

    let date = t.getDate()
    // console.log('日', date)

    let hour = t.getHours()
    // console.log(hour)

    let minute = t.getMinutes()
    // console.log(minute)
    let seconds = t.getSeconds()
    // console.log(seconds)

    format_date = year + "-" + month + "-" + date + " " + hour + ":" + minute + ":" + seconds;
    console.log(format_date)
    }
setInterval(time, 1000)

要注意
1、在逆向的时候,如果看到一个东西 + 1900先要想到这个是一个时间;
2、获取时间的时候,可以不加小括号let d=new Date

JS中的时间戳

单位是:毫秒,13位数字

// 获取时间戳
let d=new Date();
console.log(d.getTime())
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,137评论 6 511
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,824评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,465评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,131评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,140评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,895评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,535评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,435评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,952评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,081评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,210评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,896评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,552评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,089评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,198评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,531评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,209评论 2 357

推荐阅读更多精彩内容