单线程
JavaScript 语言是单线程——在某个节点只能做一件事
进程和线程
进程是cpu中资源分配最小单位
线程是cup调度的最小单位 一个进程可以有多个线程
定时器
setTimeout(回调函数,时间间隔)隔多长时间只执行一次
clearTimeout(定时器名)清除定时器
setInterval(回调函数,时间间隔)每个多长时间执行一次,一直执行
clearInterval(定时器名)清除定时器
同步异步
因为JavaScript的单线程,因此同个时间只能处理同个任务,所有任务都需要排队,前一个任务执行完,才能继续执行下一个任务,但是,如果前一个任务的执行时间很长,比如文件的读取操作或ajax操作,后一个任务就不得不等着,拿ajax来说,当用户向后台获取大量的数据时,不得不等到所有数据都获取完毕才能进行下一步操作,用户只能在那里干等着,严重影响用户体验
同步任务
同步任务是指在主线程上排队执行的任务,只有前一个任务执行完毕,才能继续执行下一个任务,当我们打开网站时,网站的渲染过程,比如元素的渲染,其实就是一个同步任务
异步任务
异步任务是指不进入主线程,而进入任务队列的任务,只有任务队列通知主线程,某个异步任务可以执行了,该任务才会进入主线程,当我们打开网站时,像图片的加载,音乐的加载,其实就是一个异步任务
预解析
JavaScript引擎对JavaScript代码进行时,会对JavaScript进行解析
在预解析阶段,会将关键字var 和function开头的语块进行提前处理
也就是变量的提升,
变量的提升(只有声明提升,赋值不会提升)
变量名与函数声明的函数名重复:函数名提升
两个变量名重复,后面覆盖前面
两个函数声明函数名重复,后面覆盖前面
函数声明和变量名重复,函数覆盖变量
函数表达式不会提升
函数提升是分作用域的,是不会超出作用域的范围
作用域:全局
1,全局作用域:script标签中的代码,
js中代码,全局作用域打开时创建,页面关闭时销毁
2,局部作用域:只当当前作用域有效,只有函数才能产生作用域 函数调用时创建,调用完后销毁
所有的全局变量都可以看成浏览器对象的属性
隐式全局变量
1在函数中没有用var声明的变量
2在函数中没有用var声明以分号分割
3在函数中没有用var声明以连等的形式连接
作用域链的查找规则
1先从当前的作用域查找,有就返回
2如果没有就一次从上一级查找,直到全局作用域
3如果全局也没有就报错
对象:属性可以是任意类型, 对象是无序列表的集合
什么是对象:
生活中的对象:世间万物皆对象
程序中的对象:Javascript中的对象其实就是生活中对象的一个抽象
对象的特征——对象的属性
对象的行为——对象的方法
调用对象的属性值:对象.属性
调用对象的方法: 对象.方法()
创建对象的方法
1字面量创建对象
var a={
name: 'zs',
age: 18,
sex: true,
sayHi: function () {
console.log(this.name);
}};
2new Object
var a=new Object();
a.name='';
a.color='';
3.工厂模式
var person = new Object();
person.name = name;
person.age = age;
person.job = job;
person.sayHi = function(){
console.log('Hello,everyBody');
}
return person;
}
var p1 = createPerson('张三', 22, 'actor');
4自定义构造函数
function Person(name,age,job){
this.name = name;
this.age = age;
this.job = job;
this.sayHi = function(){
console.log('Hello,everyBody');
}}
var p1 = new Person('张三', 22, 'actor');
new关键字
1.实例化对象
2.可以将构造函数中的this指向对象
函数中this的指向问题
1.构造函数中this指向实例化对象
2.对象函数中this指向当前对象
3.普通函数中this指向window
遍历对象
for(item in afunciton){}