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中变量提升的问题的主要内容,如果未能解决你的问题,请参考以下文章

JS预解析与变量提升

十条jQuery代码片段助力Web开发效率提升

十条jQuery代码片段助力Web开发效率提升

JavaScript 变量提升的作用

JavaScript之预编译与变量提升windowAOGOreturnif

JavaScript之变量提升