JavaScript作用域等小结

1.JS中执行上下文,范围为一段script标签,或者一个函数范围内。
变量提升中,注意函数表达式和函数声明的区别,可以说函数声明会整体提升,但是
函数表达式与变量提升相似,如以下代码

1
2
3
4
5
6
7
8
9
10
11
12
console.log(a);// a为undefined
var a=2;

var a;
console.log(a);
a=2;
上面代码其实就下面这段代码。

//又如
fn();
var fn=funciton(){};
那么这段函数表达式会被提升,导致fn()为undefined

2.this指针具体在那些地方执行。
首先肯定的是this是要在执行时才能确认值,定义时无法确认
一般分一下几种
构造函数执行,普通函数执行,对象属性执行,还有call,apply,bind三种
注意的是bind是用在函数表达式中的。

3.作用域和作用域链
JS没有块级作用域,只有函数作用域和全局作用域。

1
2
3
4
5
var a=100;
function a(){
var a=200;
console.log(a);
}

如上述代码,假设a()内的变量a不存在,那么输出的a将成为一个自由变量,根据作用域链,将往上寻找变量
将在全局内找到,进而输出。

4.闭包其实就在一个函数内部的函数可访问其内部的变量,特别在封装来说,有很大的作用

1
2
3
4
5
6
7
8
9
10
11
12
//典型闭包封装
function isLoad(){
var _onLoad=[];
return function(id){
if(_onLoad.indexOf(id)>=0)
return false;
else
{_onLoad.push(id);
return true;
}
}
}

5.同步和异步最大的区别就是,同步会造成程序阻塞,而异步就不会,且使得程序高效的运行起来
一些常用的异、

文章目录
,