# 作用域
定义：教我们怎么查变量值的一套规则
分类：
* 函数作用域：
    在函数体范围内形成的作用域
* 块级作用域
    在if else, for,while...等代码块范围内形成的作用域

demo:
函数作用域：
```
var value = 1;

function foo() {
    console.log(value);
}

function bar() {
    var value = 2;
    foo();
}

bar(); // 1
```
bar执行时 会调用foo函数，foo输出了value 但是 foo函数中没有value 所以就在函数内找不到  之后会去上层作用域找value  
foo 函数的上层作用域是window(全局对象)  window中有一个value 并且值为1


demo2 块级作用域
```
var foo = true;
if (foo) {
    let bar = foo * 2;
    bar = something( bar ); 
    console.log( bar ); //2
 }
console.log( bar ); //报错
```
报错是因为 bar被let定义，{}里面的空间属于if的块级作用域，被let 定义的变量只能在块级作用域范围内访问  所以这里，在if代码块外部不能访问到bar  然后就会报错了



### 立即执行函数
语法：
(function(){
    ...函数体内要执行的操作
})()
注：() 里面可以写匿名函数  也可以写函数声明
如：
(function funname(){
     ...函数体内要执行的操作
})()

demo:
```
(function (){
    console.log('bling')
 })()
```