Javascript中变量提升的问题
Posted Una
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Javascript中变量提升的问题相关的知识,希望对你有一定的参考价值。
一、函数声明变量提升
函数声明具有变量提升的问题,所以在函数被声明之前就可以访问。
//else中的语句相当于将if中的function重写,因此无论flag为何值,返回的方法始终为重写后的方法。 //将方法赋值给一个变量,方法就不会被重写,因此才能得到正确的结果。 function functions(flag) { if (flag) { function getValue() { return ‘a‘; } } else { function getValue() { return ‘b‘; } } return getValue(); } console.log( functions(true) );//b
等同于:
function functions(flag) { var getValue = function () { return "a"; } var getValue = function () { return "b"; } if(flag) { } else { } return getValue(); } alert(functions(true));//b
改成函数表达式的形式如下:
此时只是提升了getValue这个变量,最终返回哪个值要根据flag来判断。
function functions(flag) { if (flag) { var getValue = function () { return ‘a‘; } } else { var getValue = function () { return ‘b‘; } } return getValue(); } console.log( functions(true) );//a
二、var定义的变量,变量提升的问题
判断window对象中是否函数a1变量,var定义的变量会有变量提升,所以a1实质上是在全局环境中。
if(!("a1" in window)){ var a1 = 222; } alert(a1);//undefined
以上是关于Javascript中变量提升的问题的主要内容,如果未能解决你的问题,请参考以下文章