update:作用域和上下文的区别

This commit is contained in:
qianguyihao 2019-03-25 11:26:34 +08:00
parent c1f4350396
commit 300b469b55
2 changed files with 7 additions and 6 deletions

View File

@ -74,20 +74,21 @@
使用`函数表达式`创建的函数`var foo = function(){}`**不会被声明提前**,所以不能在声明前调用。
很好理解因为此时foo被声明了且为undefined并没有把 `function(){}` 赋值给 foo。
很好理解因为此时foo被声明了且为undefined并没有把 `function(){}` 赋值给 foo。
所以说,下面的例子,会报错:
![](http://img.smyhvae.com/20180314_2145.png)
## 函数作用域
## 作用域
**调用函数时创建函数作用域,函数执行完毕以后,函数作用域销毁。**
每调用一次函数就会创建一个新的函数作用域,他们之间是互相独立的。
**作用域**:变量和函数生效的区域。作用域在**函数定义**时,就已经确定了。
在函数作用域中可以访问到全局作用域的变量,在全局作用域中无法访问到函数作用域的变量。
**执行期上下文**:当**函数执行**时,会创建一个执行期上下文的内部对象。每调用一次函数,就会创建一个新的上下文对象,他们之间是相互独立的。当函数执行完毕,它所产生的执行期上下文会被销毁。参考链接:<https://www.cnblogs.com/chenyingjie1207/p/9966036.html>
**作用域的上下级关系:**
当在函数作用域操作一个变量时,它会先在自身作用域中寻找,如果有就直接使用(**就近原则**。如果没有则向上一级作用域中寻找直到找到全局作用域如果全局作用域中依然没有找到则会报错ReferenceError。

View File

@ -223,7 +223,7 @@ json举例
json里一般放常量、数组、对象等但很少放function。
另外对象和json没有长度json.length的打印结果是undefined。于是乎自然也就不能用for循环遍历因为便利时需要获取长度length
另外对象和json没有长度json.length的打印结果是undefined。于是乎自然也就不能用for循环遍历因为遍历时需要获取长度length
**json遍历的方法**