JS的作用域,作用域链及预解析

1.js作用域

全局作用域(整个script标签内),  局部作用域(函数内部)

 

2.作用域链

内部函数访问外部函数的变量时,采用的是链式查找的方式进行获取的。

这种结构我们称为作用域链。 

 

 

 

 

3..预解析

JS代码在浏览器中是由JS引擎进行解析执行的,分为两步,预解析和代码执行

预解析分为 变量预解析(变量提升) 和 函数预解析(函数提升)

(1)变量预解析: 把所有变量的声明提升到当前作用域的最前面,不提升赋值操作

示例:

console.log("num ");

var num = 10;

预解析后:

var num;

console.log("num");

num = 10;

//所以返回的是一个undefined

 

(2)函数预解析

将所有函数声明提升到当前作用域的最前面

实例:

var num = 10;

fn();

function fn(){

  console.log(num);

  var num = 10;

}

 

预解析后:

 var num;

function fn(){

  var num;

  console.log(num);

  num = 20;

}

num = 10;

fn();

// 预解析后,代码是逐行执行的,执行到 fn()后,去调用函数 fn(),在函数内执行到console.log(num);

//由于前面只声明了num而没有赋值,所以最后输出的是  undefined

 

posted @ 2020-04-25 16:55  瑾言**  阅读(179)  评论(0编辑  收藏  举报