变量提升理解
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,默认声明为全局变量)
变量提升:函数及变量的声明都将被提升到函数的最顶部;变量可以在使用后声明,也就是变量可以先使用再声明。(变量赋值不会提升,有多个函数声明的时候,是由最后面的函数声明来替代前面的;函数提升的优先级大于变量提升的优先级,即函数提升在变量提升之上)
以上是关于变量提升理解的主要内容,如果未能解决你的问题,请参考以下文章