作用域链简单说明
2018-03-25 本文已影响0人
Coding破耳
在函数在执行的过程中,对于函数内部需要使用到的变量
1.先从自己内部找变量,比如:
function sum(a,b){
console.log(a+b);
}
sum(3,4);
函数sum()中使用到的两个变量,都是函数内部有的,直接使用;
调用sum(3,4)就直接输出7
- 如果找不到,再从创建当前函数所在的作用域去找
var b = 3;
function sum(a){
console.log(a+b);
}
sum(3);
函数sum()中使用到的两个变量,a是函数内部有的,b在函数内部没有,查找创建sum方法时所在作用域,得到b = 3,直接使用;
调用sum(3)就直接输出6
- 创建当前函数所在的作用域找不到,再往上找
var c = 2;
function fn(x)
{
function sum(a){
console.log(a+c);
}
sum(x);
}
fn(3);
调用fn(),其实是调用sum();函数sum()中使用到的两个变量,a是函数内部有的,c在函数内部没有,查找创建sum方法时所在作用域,没找到;继续往上查找,得到c = 2,直接使用;
调用sum(3)就直接输出5
- 注意找的是变量的当前的状态
var c = 2;
function fn(x)
{
function sum(a){
console.log(a+c);
}
sum(x);
}
c = 10;
fn(3);
以上用例,执行fn()时c已经被赋值为10;因此输出13