变量提升理解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了变量提升理解相关的知识,希望对你有一定的参考价值。

参考技术A 一道常见面试题,涉及变量作用域问题
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,默认声明为全局变量)

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

以上是关于变量提升理解的主要内容,如果未能解决你的问题,请参考以下文章

深入理解js的变量提升和函数提升

深入理解js的变量提升和函数提升

深入理解js的变量提升和函数提升

如何理解函数提升

深入理解js的变量提升和函数提升

对javascript变量提升跟函数提升的理解