美文网首页
JS预解析(变量提升)

JS预解析(变量提升)

作者: 不秃头的赖 | 来源:发表于2020-09-11 08:36 被阅读0次

JS预解析(变量提升)

JS的正常执行顺序是从上往下依次执行,但是JS在执行之前会读取一遍JS代码

  • 将所有变量声明提前(不会提升变量赋值)
  • 将所有函数声明提前

接下来我们在代码的基础上来理解上面的话

1.变量预解析

console.log(a)//输出undefined
var a = 5
console.log(a)//输出5

JS在执行上述代码代码的时候,做了如下处理:

var a = undefined//此处为JS的预处理,将变量提升并且赋值为undefined
console.log(a)//输出undefined
var a = 5//此处将5赋值给a
console.log(a)//输出5

只有用var定义的变量才会进行变量提升,在ES6中,let定义变量是不会进行变量提升的

2.函数预解析

a()//输出 ’我是一个函数‘
function a(){
  console.log('我是一个函数')
}

JS在执行上述代码的时候,将函数声明提前,也就是JS在预解析的时候将函数声明提前到了最顶端,这样我们可以在任何地方调用函数


如果我们通过表达式的方式创建函数,将出现下列情况:

a()//输出 a is not a function
var a = function(){
  console.log('我是一个函数')
}

因为JS在做预解析的时候,将a进行了变量提升,上述代码执行情况应是如下:

var a = undefined//此时将a进行变量提升,并且赋值为undefined
a()//a在此时只是一个变量,所以当成函数进行调用会报错 “a is not a function”
var a = function(){
  console.log('我是一个函数')
}

3.当变量名和函数名重复时

当函数名和变量名重复时,JS会将函数名提升的更高,就是说函数声明的优先级会更高

console.log(a)//此时输出的是函数体本身 "ƒ a(){console.log('我是一个函数')}"
var a = 10
function a(){
    console.log('我是一个函数')
}

我们再看一个例子

var a = 10
function a (){
    console.log('123')
}
console.log(a)//输出的a是10

上述代码函数和变量重名,函数和变量都会进行提升,函数的优先级高于变量,而在打印之前对a进行了赋值,所以打印的结果是10

console.log(a)//输出的a是函数体
var a = 10
function a (){
    console.log('123')
}

上述代码函数和变量重名,函数和变量都会进行提升,函数的优先级高于变量,所以打印的结果是函数体

相关文章

  • JS预解析(变量提升)

    JS预解析(变量提升) JS的正常执行顺序是从上往下依次执行,但是JS在执行之前会读取一遍JS代码 将所有变量声明...

  • 1-前端基本功-JS

    //预解析:js的解析器在页面加载的时候,首先检查页面上的语法错误。把变量声明提升起来。//变量值提升变量名,不提...

  • js小知识点(预解析 引用 异常 严格模式)

    预解析:会预先解析一些(变量定义、函数会预解析);var a=12;只把var a提到作用域的顶部js会把变量的声...

  • JS预解析

    JS解释器运行JS分为两步:预解析、代码执行 预解析 JS解释器会把JS里面所有的var和function提升到当...

  • 预解析

    预解析: 在代码中,首先会预先解析一些(变量定义、函数会预解析); var a=12; js只把var a提到作用...

  • 预解析

    预解析是什么? 官方式: 预解析就是提前把变量或函数预先解析到它们被使用的环境中 聊天式: 预解析就是浏览器的js...

  • JS当中的变量提升(预解析)

    函数和变量声明的提升 在JS中存在一个很重要的特性,函数和变量声明的提升,理解这一点对于理解我们编写的代码非常有帮...

  • JavaScript预解析

    简介js作为一门解释型脚本语言,特点是边解析边执行。而预解析则是,提前解析的意思,也就是所说的变量提升。在ES6之...

  • 作用域-变量和函数提升

    变量和函数的提升可以分成两步: 1 js先预解析:把变量和函数声明提升到作用域顶端,我理解的意思是在浏览器中找一些...

  • let和var的区别

    1. 变量作用域提升 浏览器在运行代码之前会进行预解析,首先解析函数声明,定义变量,解析完之后再对函数、变量进行运...

网友评论

      本文标题:JS预解析(变量提升)

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