美文网首页
面试题:作用域和预解析阶段变量提升考察

面试题:作用域和预解析阶段变量提升考察

作者: 小鳄鱼的大哥哦 | 来源:发表于2021-03-04 15:12 被阅读0次

下面代码输出什么?

var a = 10;
(function () {
    console.log(a)
    a = 5
    console.log(window.a)
    var a = 20;
    console.log(a)
})()

这里先放个占位图遮住答案,如果不能清楚的得到结果,那么请往下看

image.png

结果:依次输出:undefined -> 10 -> 20

下面说下原理。

js代码执行存在两个阶段:

  • 预解析
  • 执行

预解析阶段,实际解析出来的js代码如下:

var a
a = 10
(function () {
    var a // var的变量默认值为undefiend
    console.log(a) // undefiend
    a = 5
    console.log(window.a) // 取window下的a,即全局作用域下的a,10
    a = 20
    console.log(a) // 20
})()

相关文章

  • 面试题:作用域和预解析阶段变量提升考察

    下面代码输出什么? 这里先放个占位图遮住答案,如果不能清楚的得到结果,那么请往下看 结果:依次输出:undefin...

  • let和var的区别

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

  • JS高级-闭包、沙箱

    作用域,作用域链,预解析 变量:局部变量、全局变量 作用域:变量的使用范围 js中没有块级作用域,一对括号中定义的...

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

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

  • 2020-05-28 vue-admin-ui总结

    作用域:var在函数里定义的才是局部变量。直接使用变量不声明则是隐式全局变量,函数里也是全局的预解析:变量声明提升...

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

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

  • 值得一看的文章--面试可能用得到

    js系列 js面试题 : 本文全面考察了: 变量名提升、this作用域链、运算符优先级、全局变量名污染已经对象属性...

  • 作用域和闭包

    变量提升(预解析) javascript的函数作用域是指在函数内声明的所有变量在函数体内始终是可见的,有意思的是,...

  • JavaScript(1)预解析

    预解析只会发生在通过var定义的变量和function上。 一、原理 1. 定义:预解析:在当前作用域下,js运行...

  • 作用域、作用域链

    作用域 在 JavaScript 中, 作用域为可访问变量,对象,函数的集合。 作用域下浏览器的操作 预解析(找v...

网友评论

      本文标题:面试题:作用域和预解析阶段变量提升考察

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