标签: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
标签:asc turn console ret function pre 函数表达式 highlight else
原文地址:http://www.cnblogs.com/yy95/p/6196401.html