美文网首页
词法作用域和变量提升

词法作用域和变量提升

作者: 芒果加奶 | 来源:发表于2017-09-20 23:09 被阅读0次

词法作用域

一、作用域

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

1.块级作用域

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

  • 函数允许访问函数外的数据
  • 整个代码结构中只有函数可以限定作用域
  • 作用域规则首先使用特生规则分析
  • 如果当前作用规则中没有名字了,就不考虑外面的名字。

二、变量提升

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

JavaScript预解析

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

  • 声明:告诉解析器有这个变量存在,这个行为是不分配内存空间的,在JavaScript中,声明一个变量的操作为var a;
  • 定义:在变量分配内存空间,在C语言中,一般生命就包含了定义,比如:int a;但在JavaScript中,var a 这种形式只是声明。
  • 初始化:在定义变量之后,系统为变量分配的空间内存储的值是不确定的,所以需要对这个空间进行初始化,以确保程序的安全性和确定性。
  • 赋值:赋值就是变量在分配空间之后的某个时间里,对变量的值进行刷新操作(修改存储空间内的数据)
    所以,本文提到的提升,是声明的提升。
预解析是分作用域的

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

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

三、作用域链

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

相关文章

  • JS基础-作用域与闭包

    1.理解词法作用域和动态作用域 词法作用域:定义在词法阶段的作用域换言之,词法作用域是由你在写代码时将变量和块作用...

  • js中的作用域

    作用域就是决定变量有效范围 作用域按决定的时期来区分可分为词法作用域和动态作用域词法作用域: 词法作用域就是作用域...

  • 你不知道的JavaScript:词法作用域

    词法作用域 简单的说,词法作用域就是定义在词法阶段的作用域。词法作用域就是由你写代码时将变量和块作用域写在哪里来决...

  • 前端笔试中常考题--js的函数与变量提升问题

    先谈谈作用域#### -- 什么是作用域?就是某个变量有(起)作用的范围;--词法作用域和动态作用域词法作用域:在...

  • 2023-01-12

    变量提升调用栈块级作用域作用域链和闭包 闭包 => 作用域链(词法作用域) => 调用栈(栈溢出) => 上下文...

  • 2、词法作用域

    词法作用域 简单地说,词法作用域就是定义在词法阶段的作用域。换句话说,词法作用域是由你在写代码时将变量和块作用域写...

  • YOU DON'T KNOW JS 笔记 2

    第二章 词法作用域 词法作用域是定义在词法阶段的作用域 由写代码时将变量和块作用域写在哪里决定 全局变量会自动成为...

  • 词法作用域和变量提升

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

  • 你不知道的JavaScript(二)|作用域和闭包

    词法阶段简单地说,词法作用域就是定义在词法阶段的作用域。换句话说,词法作用域是由你在写代码时将变量和块作用域写在哪...

  • 浅析关于 JS 作用域的几个高频知识点

    闭包 词法作用域 变量提升 变量提升 什么是变量提升 顾名思义,变量提升指的是,在声明变量的时候,变量的声明位置会...

网友评论

      本文标题:词法作用域和变量提升

      本文链接:https://www.haomeiwen.com/subject/nkuasxtx.html