美文网首页
JS预编译,变量提升的原因

JS预编译,变量提升的原因

作者: 学不动了Zzz | 来源:发表于2019-05-08 14:33 被阅读0次

1.imply global 暗示全局变量: 如果变量未经声明就赋值,此变量就归window(全局对象)所有

a = 10
console.log(window.a) // 10

2.一切声明的变量,全是window的属性:全局范围内,var(let、const不会)一个变量,这个变量归window(全局对象)所有。 let、const和var的区别

var a = 10
console.log(window.a) // 10

函数预编译(函数执行的前一刻)

function fn (a) {  
  console.log(a)
  var a = 123
  console.log(a)
  function a () {}
  console.log(a)
}
fn(1)
// 编译后:
function fn (a) {  
  var a
  function a () {}
  console.log(a) // function a () {}
  a = 123
  console.log(a) // 123
  console.log(a) // 123
}
fn(1)
编译过程:

1.创建AO对象(Activation Object :执行期上下文)

AO {
  a: 
}

2.将变量和形参名作为AO属性名,值为undefined

AO {
  a: undefined
}

3.将实参值和形参统一

AO {
  a: 1
}

4.在函数体里面找函数声明,值为函数体(如果函数名和变量或形参名相同,会把之前的值覆盖掉, 所以函数是一等公民)

AO {
  a: function a() {}
}

全局预编译

1.生成一个GO对象 Global Object(就是window)
2.将变量名作为GO属性名,值为undefined
3.在全局中找函数声明,值为函数体(如果函数名和变量或名相同,会把之前的值覆盖掉, 所以函数是一等公民)

相关文章

  • 浏览器学习笔记-JS执行

    变量提升 变量提升原理浏览器对js是先编译后执行,在编译过程中,js中的变量声明会被提升到代码段落前面。函数声明和...

  • 前端的那些事(一):变量提升与函数提升

    前言 是不是经常遇到面试问你,为什么会变量提升,函数提升,它的行为又是什么? 解答 js程序编译有两个步骤: 预解...

  • JS预编译,变量提升的原因

    1.imply global 暗示全局变量: 如果变量未经声明就赋值,此变量就归window(全局对象)所有 2....

  • 2018-07-06

    js高级 今日所学摘要: ①js的预编译:js很特别,在js代码执行前会进行预编译,预编译的结果就是——变量提升。...

  • JS预解析(变量提升)

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

  • 关于let,var,const的一些总结

    1.变量提升 以上代码,var变量会被提升,经编译器编译之后的代码如下 很多人说js是解释性语言,其实是编译后从上...

  • js 预编译

    js运行 一、语法分析 二、预编译函数声明整体提升变量声明提升;var a = 123; 这个叫变量声明加赋值;如...

  • js变量声明提升与函数表达式

    1.变量声明提升 js引擎会把变量声明与函数声明都提升到当前函数的顶部。eg: js引擎编译为 2.函数表达式 对...

  • 1-前端基本功-JS

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

  • 预编译阶段变量函数的提升 和 多个函数的执行顺序

    下面这道题讲解变量和函数的提升 预编译js的变量对象 AO对象 让js引擎去访问1、创建AO对象2、找形参和变量的...

网友评论

      本文标题:JS预编译,变量提升的原因

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