美文网首页
变量提升理解

变量提升理解

作者: Smile_smile_ | 来源:发表于2019-08-19 16:59 被阅读0次

一道常见面试题,涉及变量作用域问题
var name="Bob";
(function(){
    if(typeof name=== 'undefined'){
        name='Jack';
        console.log('Goodbye'+name);
    }else{
        console.log('hello'+name);
    }
})();  //立即执行函数
请问执行后打印出的值是:(A)     
    A. Hello Bob
    B. Goodbye Jack
    C. Hello Jack
    D. Goodbye Bob
解释:name为全局定义变量且被赋值,进入else

稍微修改下
var name="Bob";
(function(){
    if(typeof name=== 'undefined'){
        var name='Jack';//此处增加name声明
        console.log('Goodbye'+name);
    }else{
        console.log('hello'+name);
    }
})();  // D
解释: 变量提升,相当于在if判断之前定义name(与外层name不同,属于函数内局部变量) 但在if 中给name 赋值,如下:
    var name="Bob";
     (function(){
            var name;
            if(typeof name=== 'undefined'){
                name='Jack';
                console.log('Goodbye'+name);
            }else{
                console.log('hello'+name);
            }
        })();// Goodbye Jack

再次修改   
    (function(){
           name='Jack';
           if(typeof name=== 'undefined'){
                console.log('Goodbye'+name);
            }else{
                console.log('hello'+name);
            }
    })(); // hello Jack
    console.log("name:"+name);// name:Jack (未使用var,默认声明为全局变量)

变量提升:函数及变量的声明都将被提升到函数的最顶部;变量可以在使用后声明,也就是变量可以先使用再声明。(变量赋值不会提升,有多个函数声明的时候,是由最后面的函数声明来替代前面的;函数提升的优先级大于变量提升的优先级,即函数提升在变量提升之上)

相关文章

  • 变量提升理解

    一道常见面试题,涉及变量作用域问题var name="Bob";(function(){if(typeof nam...

  • 从面试题看考察知识点(二)

    题目三 说一下对变量提升的理解变量定义(提升)函数声明(提升) 说明 this 几种不同的使用场景 创建 10 个...

  • ES6(一)--let和const

    使用let,不会造成变量提升 ES5 可以理解为: ES6 因为不存在变量提升,可以理解为: 作用在块级作用域 首...

  • javascript的变量声明和函数提升

    要理解javascript的变量声明和函数提升,重要的是理解浏览器对javascript代码的处理过程。 包括变量...

  • 快速理解javascript变量提升

    先看一个简单的例子: 结果很明显,打印出Hello World另外一个例子来了: 结果有点意外,打印的是undef...

  • 如何理解javascript变量提升

    记住以下两点会对了解javascript有帮助: 变量提升 javascript引擎在编译js代码的时候会先将变量...

  • 理解Javascript的变量提升

    前言 本文2922字,阅读大约需要8分钟。 总括: 什么是变量提升,使用var,let,const,functi...

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

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

  • JS 闭包(Closure)

    参考阮一峰老师的JS 闭包 理解闭包前需要理解变量作用域、变量提升 JS作用域 那如何让它依次打印,12345呢;...

  • JavaScript 变量提升

    记录一下关于“ 变量提升 ”的理解: 文章参考: [JavaScript Scoping and Hoisting...

网友评论

      本文标题:变量提升理解

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