前端学习之Javascript基础(三)

本文深入探讨JavaScript中的关键概念:onload与DOMContentLoaded事件的区别,for..of和for..in循环的使用场景,原生Ajax实现get和post请求,立即执行函数的作用,以及浏览器BOM中的window对象、navigator对象和screen对象。同时,介绍了JavaScript的垃圾回收机制,线程和进程的关系,以及new运算符的工作原理。

1.onload和DOMContentLoaded区别理解

当onload事件触发时,页面页面上所有的DOM,样式表,脚本,图片,flash都已经加载完成。而DOMContentLoaded事件触发时,仅DOM加载完成。

2.for…of和for…in的区别

for…in实际上遍历的是对象的属性名称。for…in在遍历数组时有可能得到字符串索引,而不是数字索引,如下

var arr = ['a', 'b', 'c']
arr.name = 'tom'
for(var x in arr){
    console.log(x) // '0','1','2','tom'
}

for…in循环把name也包含在内。而for…of解决了这一问题复制代码

3.原生Ajax写法

get请求

function Ajax(url) {
    var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : ActiveXObjext('microsoft.XMLHttp')
    xhr.open('get', url, true)
    xhr.send()
    xhr.onreadystatechange = () => {
        if(xhr.reayState == 4){
            if(xhr.readyState == 200){
                var data = xhr.responseText
                return data
            }
        }
    }
}

4.post请求

function Ajax(url, data){
    var xhr = window.XMLHttpRequset ? new XMLHttpRequest() : ActiveXObject('microsoft.XMLHttp')
    xhr.open('post', url true)
    xhr.setRequestHeader('content-type','xxx')
    xhr.send(data)
    xhr.onreadystatechange = () => {
        if(readyState == 4){
            if(readyState == 200){
                var list = xhr.reponseText
                return list
            }
        }
    }
}

5.立即执行函数

定义声明一个函数,并马上调用这个匿名函数就叫做立即执行函数

  • 写法:(function(){})() (function(){}())

  • 作用:
    1.不必为函数命名,避免污染全局变量
    2.立即执行函数内部形成一个单独的作用域,可以封装外部无法读取的私有 变量
    3.封装变量

6.常用BOM属性、对象、方法

BOM即javascript可以进行操作浏览器各个功能部件的接口

1)window对象

  • window方法
    window.confirm() 确认
    window.open() 打开新窗口
    window.close 关闭窗口复制代码
  • window属性
    closed opener复制代码

2)navigator对象

  • navigator对象属性
    navigator.appName 浏览器名称
    navigator.online 系统是否处于脱机状态
    navigator.userAgent 返回客户端完整信息复制代码

3)screen对象

  • screen对象属性
    deviceXDPI 返回显示屏幕的每英寸水平点数复制代码
    history对象

4)history对象属性
length 在同一个标签页,跳转了多少次,length就是多少复制代码

7.javascript垃圾回收机制

两种方法:标记清除、引用计数

8.线程和进程的关系

进程(process)和线程(thread)是操作系统的基本概念
计算机的核心是CPU,它承担了所有的计算任务,单个CPU一次只能运行一个任务,进程它代表CPU所能处理的单个任务。任一时刻,CPU总是运行一个进程,其他进程处于非运行状态。

  • 一个进程可以包括多个线程。
  • 一个进程的内存空间是共享的,每个线程都可以使用这些共享内存。
  • 一个线程使用某些共享内存时,其他线程必须等它结束,才能使用这一块内存。
  • 一个防止其他线程使用的简单方法"互斥锁"(Mutual exclusion,缩写 Mutex),防止多个线程同时读写某一块内存区域。
    某些内存区域,只能供给固定数目的线程使用。
  • 操作系统的设计,因此可以归结为三点:
    (1)以多进程形式,允许多个任务同时运行;
    (2)以多线程形式,允许单个任务分成不同的部分运行;
    (3)提供协调机制,一方面防止进程之间和线程之间产生冲突,另一方面允许进程之间和线程之间共享资源。

9.new运算符的实现机制

1.首先创建了一个新的空对象
2.设置原型,将对象的原型设置为函数的prototype对象。
3.让函数的this指向这个对象,执行构造函数的代码(为这个新对象添加属性)
4.判断函数的返回值类型,如果是值类型,返回创建的对象。如果是引用类型,就返回这个引用类型的对象。

参考书籍:《Javascript高级程序设计》

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值