7、变量提升的处理机制(2)

1、条件判断下的变量提升:
EC(G)全局上下文中的变量提升, 条件中带 function 的在新版本浏览器中只会
提前声明,不会再提前赋值了;
【老版本】:
var a;
func = 函数;
【新版本】:
var a;
func;

if (!('a' in window)) {
     var a = 1;
     function func() {}
}
console.log(a);  // undefined
fn();  // 5

function fn() {
    console.log(1)
}
fn();  // 5

function fn() {
    console.log(2)
}
fn();  // 5

var fn = function() {
    console.log(3)
}
fn();  // 3

function fn() {
    console.log(4)
}
fn();  // 3

function fn() {
    console.log(5)
}
fn()  // 3
var foo = 1

function bar() {
    //  无论条件是否成立,变量都会提前声明 
    if (!foo) {
        var foo = 10
    }
    console.log(foo)  // 10
}
bar()
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

相关阅读更多精彩内容

  • 1. 什么是变量提升? 当栈内存(作用域)形成, JS代码自上而下执行之前,浏览器首先会把所有带var/funct...
    _hider阅读 8,377评论 0 2
  • 1.背景 当浏览器开辟出供代码执行的栈内存后,代码并没有自上而下立即执行,而是继续做了一些事情:把当前作用域中所有...
    chan7788阅读 2,118评论 0 0
  • ### 只对等号左边进行变量提升 /* * 变量提升 * var fn; =>只对等号左边的进行变量提升 * f...
    路上灵魂的自由者阅读 1,396评论 0 1
  • 1. 变量提升的概念 变量提升的概念:当栈内存(作用域)形成,JS 代码自上而下执行之前,浏览器首先会把所有带 v...
    destiny0904阅读 4,172评论 0 3
  • 堆内存 & 栈内存 JS中的内存一共两种:堆内存和栈内存 堆内存 作用:用来存储引用数据类型值的内存空间叫做堆内存...
    田成力阅读 4,544评论 0 1

友情链接更多精彩内容