码迷,mamicode.com
首页 > 编程语言 > 详细

Javascript中变量提升的问题

时间:2016-12-19 11:17:26      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:asc   turn   console   ret   function   pre   函数表达式   highlight   else   

一、函数声明变量提升

     函数声明具有变量提升的问题,所以在函数被声明之前就可以访问。

//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中变量提升的问题

标签:asc   turn   console   ret   function   pre   函数表达式   highlight   else   

原文地址:http://www.cnblogs.com/yy95/p/6196401.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!