首页 > 代码库 > Javascript中变量提升的问题

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 = http://www.mamicode.com/function () {"a";}var getValue = http://www.mamicode.com/function () {"b";}if(flag) {	}else {	}return getValue();}alert(functions(true));//b

 

改成函数表达式的形式如下:

此时只是提升了getValue这个变量,最终返回哪个值要根据flag来判断。

function functions(flag) {    if (flag) {      var getValue =  http://www.mamicode.com/function () {>

 

二、var定义的变量,变量提升的问题

判断window对象中是否函数a1变量,var定义的变量会有变量提升,所以a1实质上是在全局环境中。

if(!("a1" in window)){    var a1 = 222;}alert(a1);//undefined

 

Javascript中变量提升的问题