})
window.addEventListener('load', function () {
alert(22);
})
document.addEventListener('DOMContentLoaded', function () {
alert(33);
})
// load 等页面内容全部加载完毕,包含页面dom元素 图片 flash css 等等
// DOMContentLoaded 是DOM 加载完毕,不包含图片 falsh css 等就可以执行 加载速度比 load更快一些
点击
2.2 调整窗口大小事件
window.onresize = function(){}
//或者
window.addEventListener("resize",function(){});
window.onresize 是调整窗口大小加载事件, 当触发时就调用的处理函数;
😆温馨提醒😆:
-
只要窗口大小发生像素变化,就会触发这个事件;
-
我们经常利用这个事件完成响应式布局。
window.innerWidth当前屏幕的宽度;
完整代码演示如下:
Document div { width: 200px; height: 200px; background-color: pink; }(3)定时器
3.1 两种定时器
window 对象给我们提供了 2 个非常好用的方法 - - 定时器:
-
setTimeout() -
setInterval()
3.2 setTimeout() 定时器
window.setTimeout(调用函数, [延迟的毫秒数]);
1️⃣ setTimeout() 方法用于设置一个定时器,该定时器在定时器到期后执行调用函数。
2️⃣ setTimeout() 这个调用函数我们也称为回调函数 callback;
3️⃣ 普通函数是按照代码顺序直接调用。而这个函数,需要等待时间,时间到了才去调用这个函数,因此称为回调函数;
😆温馨提醒😆:
-
window 可以省略;
-
这个调用函数可以直接写函数,或者写函数名或者采取字符串‘函数名()'三种形式。第三种不推荐;
-
延迟的毫秒数省略默认是 0,如果写,必须是毫秒;
-
因为定时器可能有很多,所以我们经常给定时器赋值一个标识符;
完整代码演示如下:
Document3.3 停止 setTimeout() 定时器
window.clearTimeout(timeoutID)
clearTimeout() 方法取消了先前通过调用 setTimeout() 建立的定时器;
😆温馨提醒😆:
-
window 可以省略;
-
里面的参数就是定时器的标识符;
完整代码演示如下:
Document点击停止定时器
3.4 setInterval() 定时器
window.setInterval(回调函数, [间隔的毫秒数]);
setInterval() 方法重复调用一个函数,每隔这个时间,就去调用一次回调函数。
😆温馨提醒😆:
-
window 可以省略;
-
这个调用函数可以直接写函数,或者写函数名或者采取字符串 ‘函数名()’ 三种形式;
-
间隔的毫秒数省略默认是 0,如果写,必须是毫秒,表示每隔多少毫秒就自动调用这个函数;
-
因为定时器可能有很多,所以我们经常给定时器赋值一个标识符;
-
第一次执行也是间隔毫秒数之后执行,之后每隔毫秒数就执行一次;
完整代码演示如下:
Document3.4.1 案例:倒计时
案例分析:
-
这个倒计时是不断变化的,因此需要定时器来自动变化
(setInterval); -
三个黑色盒子里面分别存放时分秒;
-
三个黑色盒子利用
innerHTML放入计算的小时分钟秒数 ; -
第一次执行也是间隔毫秒数,因此刚刷新页面会有空白;
-
最好采取封装函数的方式, 这样可以先调用一次这个函数,防止刚开始刷新页面有空白问题;
完整代码演示如下:
Document div { margin: 200px; } span { display: inline-block; width: 40px; height: 40px; background-color: #333; font-size: 20px; color: #fff; text-align: center; line-height: 40px; }1
2
3
3.5 停止 setInterval() 定时器
window.clearInterval(intervalID);
clearInterval()方法取消了先前通过调用 setInterval()建立的定时器;
😆温馨提醒😆:
-
window 可以省略;
-
里面的参数就是定时器的标识符;
3.5.1 案例:发送短信
要求:点击按钮后,该按钮60秒之内不能再次点击,防止重复发送短信;
显示效果如下:
案例分析:
-
按钮点击之后,会禁用 disabled 为 true;
-
同时按钮里面的内容会变化, 注意 button 里面的内容通过 innerHTML 修改;
-
里面秒数是有变化的,因此需要用到定时器;
-
定义一个变量,在定时器里面,不断递减;
-
如果变量为 0 说明到了时间,我们需要停止定时器,并且复原按钮初始状态;
完整代码演示如下:
Document手机号码: 发送
3.6 this
this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,一般情况下this的最终指向的是那个调用它的对象;
现阶段,我们先了解一下几个this指向:
-
全局作用域或者普通函数中this指向全局对象window(注意定时器里面的this指向window);
-
方法调用中谁调用this指向谁;
-
构造函数中this指向构造函数的实例;
(4)JS 执行机制
4.1 JS 是单线程
1️⃣ JavaScript 语言的一大特点就是单线程,也就是说,同一个时间只能做一件事。这是因为 Javascript 这门脚本语言诞生的使命所致——JavaScript 是为处理页面中用户的交互,以及操作 DOM 而诞生的。比如我们对某个 DOM 元素进行添加和删除操作,不能同时进行。 应该先进行添加,之后再删除。
2️⃣ 单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务。这样所导致的问题是: 如果 JS 执行的时间过长,这样就会造成页面的渲染不连贯,导致页面渲染加载阻塞的感觉。
4.2 同步和异步
为了解决这个问题,利用多核 CPU 的计算能力,HTML5 提出 Web Worker 标准,允许 JavaScript 脚本创建多个线程。于是,JS 中出现了同步和异步。
1️⃣ 同步:前一个任务结束后再执行后一个任务,程序的执行顺序与任务的排列顺序是一致的、同步的。比如做饭的同步做法:我们要烧水煮饭,等水开了(10分钟之后),再去切菜,炒菜;
2️⃣ 异步:你在做一件事情时,因为这件事情会花费很长时间,在做这件事的同时,你还可以去处理其他事情。比如做饭的异步做法,我们在烧水的同时,利用这10分钟,去切菜,炒菜;
4.3 同步任务和异步任务
4.3.1 同步任务
同步任务都在主线程上执行,形成一个执行栈;
4.3.2 异步任务
JS 的异步是通过回调函数实现的。
一般而言,异步任务有以下三种类型:
-
普通事件,如 click、resize 等
-
资源加载,如 load、error 等
-
定时器,包括 setInterval、setTimeout 等
异步任务相关回调函数添加到任务队列中(任务队列也称为消息队列)
4.4 JS 执行机制
1️⃣ 先执行执行栈中的同步任务;
2️⃣ 异步任务(回调函数)放入任务队列中;
3️⃣ 一旦执行栈中的所有同步任务执行完毕,系统就会按次序读取任务队列中的异步任务,于是被读取的异步任务结束等待状态,进入执行栈,开始执行;
由于主线程不断的重复获得任务、执行任务、再获取任务、再执行,所以这种机制被称为事件循环( event loop);
(5)location 对象
5.1 什么是 location 对象
window 对象给我们提供了一个 location 属性用于获取或设置窗体的 URL,并且可以用于解析 URL 。 因为这个属性返回的是一个对象,所以我们将这个属性也称为 location 对象。
5.2 URL
统一资源定位符 (Uniform Resource Locator, URL) 是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的 URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。
URL 的一般语法格式为:
protocol://host[:port]/path/[?query]#fragment
| 组成 | 说明 |
| --- | --- |
| protocol | 通信协议,常用的http,ftp,maito等 |
| host | 主机(域名) |
| port | 端口号 可选,省略时使用方案的默认端口,如http的默认端口为80 |
| path | 路径,由零或者多个 ‘/’ 符号隔开的字符串,一般用来表示主机上的一个目录或者文件地址 |
| query | 参数,以键值对的形式,通过&符号分隔开来 |
| fragment | 片段,#后面内容,常见于链接,锚点 |
5.3 location 对象的属性
| location 对象的属性 | 返回值 |
| --- | --- |
| location.href | 获取或者设置整个URL |
| location.host | 返回主机(域名) |
| location.port | 返回端口号,如果未写,返回空字符串 |
| location.pathname | 返回路径 |
| location.search | 返回参数 |
| location.hash | 返回片段,#后面内容,常见于链接,锚点 |
5.3.1 案例:5秒钟之后自动跳转页面
案例分析:
-
利用定时器做倒计时效果;
-
时间到了,就跳转页面。 使用
location.href;
完整代码演示如下:
Document点击
5.3.2 案例:获取 URL 参数数据
要求:主要练习数据在不同页面中的传递;
案例分析:
-
第一个登录页面,里面有提交表单,action 提交到 index.html页面;
-
第二个页面,可以使用第一个页面的参数,这样实现了一个数据不同页面之间的传递效果;
-
第二个页面之所以可以使用第一个页面的数据,是利用了URL 里面的
location.search参数; -
在第二个页面中,需要把这个参数提取;
-
第一步去掉? 利用
substr; -
第二步 利用=号分割 键 和 值
split(‘=‘); -
第一个数组就是键 第二个数组就是值;
完整代码演示如下:
login.html用户名:
文末
篇幅有限没有列举更多的前端面试题,小编把整理的前端大厂面试题PDF分享出来,一共有269页