# 作用域 定义:教我们怎么查变量值的一套规则 分类: * 函数作用域: 在函数体范围内形成的作用域 * 块级作用域 在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') })() ```