区分线程和进程
进程是一个工厂,工厂有它的独立资源-工厂之间相互独立-线程是工厂中的工人,多个工人协作完成任务-工厂内有一个或多个工人-工人之间共享空间
js的单线程
javaScript 语言的一大特点就是单线程 为了避免复杂性,从一诞生,JavaScript 就是单线程,这已经成了这门语言的核心特征,将来也不会改变。
为了利用多核 CPU 的计算能力,HTML5 提出 Web Worker 标准,允许 JavaScript 脚本创建多个线程,但是子线程完全受主线程控制,且不得操作 DOM。
同步执行:就是按顺序执行
function fun1() {
console.log(1);
}function fun2() {
console.log(2);
}
// 输出
fun1();
fun2();
1
2
同步任务是指在主线程上排队执行的任务,只有前一个任务执行完毕,才能继续执行下一个任务
异步任务
异步任务是指不进入主线程,一般只有同步任务完成,才会开始执行异步任务,当我们打开网站时,像图片的加载,音乐的加载,其实就是一个异步任务
异步:现在只说定时器
前者可以使一段代码在指定时间后运行;而后者则可以使一段代码每过指定时间就运行一次。
window.setTimeout(code,millisec);
window.setInterval(code,millisec);
其中,code可以是用引号括起来的一段代码,也可以是一个函数名,到了指定的时间,系统便会自动调用该函数,当使用函数名作为调用句柄时,不能带有任何参数;而使用字符串时,则可以在其中写入要传递的参数。两个方法中的第二个参数是millisec,表示延时或者重复执行的毫秒数。
清除定时器
clearTimeout(定时器名)
clearInterval(定时器名)
var i=0;
b= setInterval(function(){//创建定时器
if (i<10){
console.log(i);
i++
}else{
clearInterval(b)//当上面i输出到9时执行这一句清楚定时器
}
},200)
预解析:
当变量和函数的声明处在作用域比较靠后的位置的时候,变量和函数的声明会被提升到作用域的开头。
一定注意是提升声明
console.log(a);
var a=1;
不会输出1,因为只提升声明,a=1,还留着原地
全局作用域:全局变量
直接编写在 script 标签之中的JS代码,都是全局作用域;
全局作用域在页面打开时创建,页面关闭时销毁;
局部作用域(函数作用域):局部变量(在全局内不会被找到)
在函数内部声明变量
在函数内部就是局部作用域,这个代码的名字只在函数的内部起作用
调用函数时创建函数作用域,函数执行完毕之后,函数作用域销毁;
每调用一次函数就会创建一个新的函数作用域,它们之间是相互独立的。
隐式全局变量
声明变量使用`var`, 如果不使用`var`声明的变量就是全局变量( 禁用 )
可以再在全局内被找到!!!!!!!
因为在任何代码结构中都可以使用该语法. 那么再代码维护的时候会有问题. 所以除非特殊原因不要这么用.
var a = 10;
function test() {
a = 100;
alert(a);
alert(this.a); //找的是全局,函数外部不能调用函数内的a的值,一般函数直接执行,内部this指向全局window
var a; //提前
alert(a);
}
// test();
(function(){
console.log(a)//命名提前,执行2 a=函数
var a=5;//提前1
function a(){}//提前2
console.log(a)//a已经赋值5
function b(){}//提前3
b=6
console.log(b) //赋值6
var c = d = b //提前声明4且。bd是隐式全局变量
})()
console.log(d)//d=b=6,隐式全局
console.log(c)//c是局部变量