如下图:我在函数里面用var声明了一个变量,函数的整个的作用域就可以访问到的。按理说两个结果都应该是10啊!是我哪里搞明白?求指点
function f(is_flag){
var x;
if(is_flag){
x = 10;
}
return x;
}
相当于这个,声明提升,赋值不会
你第二个传的是false啊,那个函数里面的判断条件为false,直接就return x了,当然是undefined
你说的对,var是存在变量提升
但是你这个var是在函数中的
函数每次执行创建一个上下文执行环境,当前次执行时的变量存在于当前上下文执行环境中,若无外部引用函数执行完之后内部变量会被释放掉。
《高程》上 垃圾收集这一节有一句话:局部变量只在函数执行的过程中存在。
var声明变量确实会提前声明,而且还是全局作用域,但是赋值不会,它只是提前声明了x这个变量而已,代码执行到var x=10这里才会赋值,但是这里因为if里的判断时false,所以不执行代码,相当于你声明了变量。但没给他赋值
可以看一下这篇文章,希望能帮到你:http://t.csdn.cn/Ze0e4