mirror of
https://github.com/Estom/notes.git
synced 2026-04-05 03:48:56 +08:00
javascript 简单复习
This commit is contained in:
35
JavaScript/ecmascript-5/closer.md
Normal file
35
JavaScript/ecmascript-5/closer.md
Normal file
@@ -0,0 +1,35 @@
|
||||
## 作用域链
|
||||
|
||||
很多开发语言中都具有块级作用域,但 JavaScript 中并没有跨级作用域,这经常会导致理解上的困惑。如下示例:
|
||||
|
||||
```javascript
|
||||
if( true ){
|
||||
var color = "blue";
|
||||
}
|
||||
console.log( color );// blue
|
||||
```
|
||||
|
||||
上述代码在 if 语句中定义了变量 color。但该变量的作用域是全局域,原因是 JavaScript 中没有块级作用域。
|
||||
|
||||
虽然 JavaScript 没有块级作用域,但具有函数作用域。在某个函数内部定义的变量的作用域就是该函数作用域。
|
||||
|
||||
```javascript
|
||||
function fun(){
|
||||
var javascript = "this is javascript";
|
||||
}
|
||||
console.log( javascript );// 输出报错
|
||||
```
|
||||
|
||||
上述代码在函数 fun 内部定义了变量 JavaScript,该变量的作用域是 fun 函数作用域。所以在全局域访问该变量时会出错。
|
||||
|
||||
每一段 JavaScript 代码(全局代码或函数)都有一个与之关联的作用域链。这个作用域链是一个对象列表或链表,这组对象定义了这段代码“作用域中”的变量。如下示例:
|
||||
|
||||
```javascript
|
||||
var a = 1;
|
||||
// 在全局域中只能访问变量 a
|
||||
|
||||
function f(){
|
||||
// 在 f 函数作用域中可以访问变量 a 和 b
|
||||
var b = 2;
|
||||
}
|
||||
```
|
||||
Reference in New Issue
Block a user