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