第四章 js基础知识下

题目

  • 同步和异步的区别是什么?分别举一个同步和异步的例子
同步会阻塞代码执行,而异步不会
alert是同步、setTimeout 是异步
  • 一个关于setTimeout的笔试题
console.log(1)
setTimeout(function(){
    console.log(2)
},0)
console.log(3)
setTimeout(function(){
    console.log(4)
},1000)
console.log(5)
  • 前端使用异步的场景有哪些
定时任务: setTimeout 、setTimeInterval
网络请求: ajax请求、动态<img>加载
事件绑定

共同点: 都需要等待

知识点

  • 什么是异步(对比同步)
// 异步
console.log(100)
setTimeout(function(){
    console.log(200)
},1000)
console.log(300)

// 对比同步
console.log(100)
alert(200) //1秒之后点击确认
console.log(300)

// 异步和同步的一个区别就是有没有阻塞程序的执行,
  • 前端使用异步的场景
// 何时需要异步
在可能发生等待的情况
等待过程中不能像alert一样阻塞程序运行
因此,所有的“等待情况”都需要异步

//场景
定时任务: setTimeout 、setTimeInterval
网络请求: ajax请求、动态<img>加载
事件绑定

// ajax请求代码示例
console.log('start')
$.get('./data1.json', function(data1){
    console.log(data1)
})
console.log('end')

// img
console.log('start')
var img = document.createElement('img')
img.onload = function(){
    console.log('loaded')
}
img.src = '/xxx.png'
console.log('end')

// 事件绑定
console.log('start')
document.getElementById('btn1').addEventListener('click', function{
    alert('clicked')
})
console.log('end')
  • 异步和单线程
console.log(100)
setTimeout(function(){
    console.log(200)
})
console.log(300)
1.执行第一行,打印100
2.执行setTimeout后,传入setTimeout的函数会被暂存起来,不会立即执行(单线程的特定,不能同时干两件事)
3.执行最后一行,打印300
4.待所有的程序执行完,处于空闲状态,会立即看有没有暂存起来的要执行
4.发现暂存起来的setTimeout中的函数无需等待时间,就立即过来执行

其他知识

题目

  • 获取2017-06-10格式日期
function formatDate(dt){
    if(!dt){
      dt = new Date()
    }
    var year = dt.getFullYear()
    var month = dt.getMonth()
    var date = dt.getDate()
    if(month< 10){
        month = '0' + month
    }
    if(date< 10){
        date = '0' + date
    }
    return year + '-' + month + '-' + date
}
var dt = new Date()
var formatDate = formatDate(dt)
console.log(formatDate)
  • 获取随机数,要求是长度一直的字符串格式
var randon = Math.random()
var random = random + '0000000000'
var random = random.slice(0, 10)
console.log(random)
  • 写一个能遍历对象和数组的通用forEach 函数
function forEach(obj, fn){
    var key
    if(obj instanceof Array){
        // 准确判断是不是数组
        obj.forEach(function(item, index){
            fn(index, item)
      })
    } else {
        // 不是数组就是对象
        for(key in obj){
            fn(key, obj[key])
        }
    }
}

var arr = [1,2,3]
forEach(arr, function(index, item){
    console.log(index, item)
})

var obj = {x: 100, y: 200}
forEach(obj, function(key, value){
    console.log(key, value)
})

知识点

  • 日期
Date.now() //获取当前时间毫秒数
var dt = new Date()
dt.getTime()
dt.getFullYear()
dt.getMonth()
dt.getDate()
dt.getHours()
dt.getMinutes()
dt.getSeconds()
  • Math
获取随机数 Math.random()

  • 数组API
// forEach 遍历所有元素
var arr = [1,2,3]
arr.forEach(function(item,index){
  //遍历所有元素
  console.log(index, item)
})
//every 判断所有元素是否都符合条件
var arr = [1,2,3]
var result = arr.every(function(item, index){
  // 用来判断所有的数组元素,都满足一个条件
  if(item < 4){
      return true
  }
})
console.log(result)
// some 判断是否有至少一个元素符合条件
// sort 排序
// map 对元素重新组装,生成新数组
var arr = [1,2,3,4]
var arr2 = arr.map(function(item, index){
    // 将元素重新组装,并返回
    return '<b>' + item + '</b>'
})
console.log(arr2)
// filter 过滤符合条件的元素
var arr = [1,2,3]
var arr2 = arr.filter(function(item, index){
    // 通过某一个条件过滤数组
    if(item >= 2){
        return true
    }
})
console.log(arr2)
  • 对象API
var obj = {
    x: 100,
    y: 200,
    z: 300
}
var key
for(key in obj){
    // 注意这里的 hasOwnProperty 
    // 所有继承了 Object 的对象都会继承到 `hasOwnProperty` 方法。这个方法可以用来检测一个对象是否含有特定的自身属性

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

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,147评论 25 707
  • 刚旅行完写游记记忆是最新鲜的,记得的细节是最多的。就像朱自清写完《桨声灯影里的秦淮河》一样,我还等着ln同学的游记...
    abcdhp阅读 296评论 4 2
  • 当那一刻不来临, 放不下的都能放下。 你不能预料,你不常挂在心里的, 会不会突然不在了。 于是,我们开始后悔,开始...
    littlewish阅读 353评论 0 0
  • (共收入诗词33篇) 【引言】 扇子,不仅是时令用物。更是中华文明的古老符号之一。 尧传位给舜,舜便做一把五明扇,...
    肖三羊阅读 817评论 1 7
  • 今天首次尝试跑10公里,还好跑下来了,没觉得很吃力。自从鼓山回来,好像体力好了很多,突破了十公里大关,半马就在不远...
    空格儿阅读 257评论 15 2