作用域链简单说明

2018-03-25  本文已影响0人  Coding破耳

在函数在执行的过程中,对于函数内部需要使用到的变量
1.先从自己内部找变量,比如:

function sum(a,b){
    console.log(a+b);
}

sum(3,4);

函数sum()中使用到的两个变量,都是函数内部有的,直接使用;
调用sum(3,4)就直接输出7

  1. 如果找不到,再从创建当前函数所在的作用域去找
var b = 3;
function sum(a){
    console.log(a+b);
}

sum(3);

函数sum()中使用到的两个变量,a是函数内部有的,b在函数内部没有,查找创建sum方法时所在作用域,得到b = 3,直接使用;
调用sum(3)就直接输出6

  1. 创建当前函数所在的作用域找不到,再往上找
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

  1. 注意找的是变量的当前的状态
var c = 2;
function fn(x)
{
  function sum(a){
    console.log(a+c);
  }
  sum(x);
}
c = 10;
fn(3);

以上用例,执行fn()时c已经被赋值为10;因此输出13

上一篇下一篇

猜你喜欢

热点阅读