javascript作用域与函数与闭包


使用递归获取后代元素

作用域

什么是作用域

变量起作用的范围

什么是块级作用域

JS中没有块级作用域,使用代码块限定的作用域就是块级作用域

JS中的作用域叫做 词法作用域

词法作用域

在代码写好的时候,就能确定变量的作用域,这种作用域就是词法作用域

动态作用域.(是词法作用域就不可能是动态作用域)

在js当中,只有函数能创造作用域

1
2
3
4
5
6
7
8
9
var num = 123
function f1(){ 
    console.log(num);  //如果是动态作用域打印的就是456 如果是词法作用域 打印123 

function f2(){ 
    var num = 456
    f1(); 

f2();

变量提升

JS代码的运行分两个阶段 预解析阶段 变量名和函数提升 将var声明的变量名和function开头的函数进行提升 提升到当前作用域的最上方 * 执行阶段

注意: 1.变量和函数同名的时候 只提升函数,忽略变量名 2.函数同名的时候 都提升,但是后面的函数会覆盖前面的函数 3.函数表达式,只会提升变量名,不会提后面的函数

4.变量提升只会将变量和函数提升到当前作用域的最上方

1
2
3
 funciton foo(){ 
    var num =123
 }

5.变量提升是分块