JS 自测题

简介: JS 自测题

引用类型

答案

{
  x:1,
  y:2
}

window.onload 和 DOMcontentLoaded 的区别

下方代码的打印顺序是?

答案

解析

window.addEventListener("load", function () {
  // 页面的全部资源加载完才会执行,包括图片视频等
});
document.addEventListener("DOMContentLoaded", function () {
  // DOM 渲染完即可执行,此时图片、视频可能还没有加载完
});

创建 10 个<a>标签,点击的时候弹出来对应的序号

let a
for (let i = 0; i < 10; i++) {
    a = document.createElement('a')
    a.innerHTML = i + '<br>'
    a.addEventListener('click', function (e) {
        e.preventDefault()
        alert(i)
    })
    document.body.appendChild(a)
}


  • 原理:for 循环中定义 i 是块级作用域,10次循环形成10个块级作用域,点击时获取的 i 值即其序号。

若按以下写法(在 for 循环外定义 i),会弹出几?

答案:10

  • 解析:在 for 循环外定义 i,则 i 在 for 循环内是自由变量,点击事件触发时,访问的都是 for 循环外的 i 变量,此时 for 循环早已结束,i 值为 10

自由变量

当前作用域没有定义的变量 即自由变量

自由变量的查找,是 在函数定义的地方,向上级作用域查找

不是在执行的地方!

自测题1:下方代码会打印多少?

函数作为返回值

答案 100

自测题2:下方代码会打印多少?

答案 100

自测题3:下方代码运行效果?

答案

100
10
10

setTimeout 测试

自测题1:下方代码会打印多少?

console.log(1);

setTimeout(function () {
  console.log(2);
}, 1000);

console.log(3);

setTimeout(function () {
  console.log(4);
}, 0);

console.log(5);

答案:

1 
3
5
4
2

自测题2:下方代码会打印多少?

let i;
for (i = 1; i <= 3; i++) {
  setTimeout(function () {
    console.log(i);
  }, 0);
}

答案

4
4
4

手写 Promise 加载一张图片

function loadImg(src) {
    return new Promise(
        (resolve, reject) => {
            const img = document.createElement('img')
            img.onload = () => {
                resolve(img)
            }
            img.onerror = () => {
                const err = new Error(`图片加载失败 ${src}`)
                reject(err)
            }
            img.src = src
        }
    )
}

使用范例

const url1 = '图片1的地址'
const url2 = '图片2的地址'

loadImg(url1).then(img1 => {
    console.log(img1.width)
    return loadImg(url2) 
}).then(img2 => {
    console.log(img2.width)
}).catch(err => console.error(err))


目录
相关文章
|
1月前
|
JavaScript 前端开发 Java
JS经常碰见的报错问题
JS经常碰见的报错问题
|
8月前
|
JavaScript 前端开发 API
|
11月前
|
JavaScript 索引
温故而知新《9种js数组去重方法》
温故而知新《9种js数组去重方法》
47 0
|
12月前
|
JavaScript 前端开发
JS(第十一课)JS中的字符串你了解多少?
JS(第十一课)JS中的字符串你了解多少?
61 0
|
12月前
|
JavaScript
JS(第十二课)JS中的日期对象
JS(第十二课)JS中的日期对象
83 0
|
存储 JavaScript 前端开发
重温js——js语法基础
在变量声明这里,大家肯定还记得。所有的js 在使用的时候需要进行声明。也就是在内存地址中开辟一个空间。然后等待数据的"入住"
重温js——js语法基础
|
存储 JavaScript
重温js——数组
push 是在数组的末尾添加新的数据,数据可以是多个,会依次添加到数组的末尾
重温js——数组
|
JavaScript
【JavaScript-循环-js你学懂了吗?】
【JavaScript-循环-js你学懂了吗?】
47 0
【JavaScript-循环-js你学懂了吗?】
|
存储 Web App开发 自然语言处理
JS 到底是在干嘛:一文搞懂JS 执行上下文
JS 到底是在干嘛:一文搞懂JS 执行上下文
209 0
JS 到底是在干嘛:一文搞懂JS 执行上下文