词法作用域和变量提升

2017-09-20  本文已影响0人  芒果加奶

词法作用域

一、作用域

定义:就是作用范围
作用域说明的是一个变量可以在什么地方被使用,什么地方不能被使用。

1.块级作用域

JavaScript中没有块级作用域概念
所以只要声明过的变量,在访问的时候就不会报错。
在JavaScript中作用域规则:

二、变量提升

fun();
function(){
alert(123);
}
//实际语法中没有报错,因为JavaScript并非在运行简单的逐句解析执行。

JavaScript预解析

JavaScript引擎在对JavaScript进行解释执行之前,会对JavaScript代码进行预解析阶段,会以关键字varfunction开头的语句块提前进行处理。
当变量和函数声明的处在作用域比较靠后的位置的时候,变量和函数的声明会被提升到作用域的开头。
声明、定义、初始化的区别:

预解析是分作用域的

声明变量并不是将所有的声明都提升到window对象下面,提升原则是提升到变量运行的环境(作用域)中。

函数表达式并不会被提升
    func();
    var func = function(){
        alert("我被提升了");
    }
    //这里会直接宝座找不到函数,原因是var fun = function(){},这种函数表达式,并不会被提升,只是简单了对变量进行了处理。

三、作用域链

什么是作用域链?只有函数可以制造作用域结构,只要是代码,就至少有一个作用域,即全局作用域。
凡是代码中有函数,那么这个函数就构成另一个作用域。如果函数中还有函数,那么在这个作用域就又可以诞生一个作用域。将这样的作用域列出来,就会出现一个结构,函数内指向函数外的链式结构,称为作用域链。

上一篇下一篇

猜你喜欢

热点阅读