JavaScript的var作用域问题

如下图:我在函数里面用var声明了一个变量,函数的整个的作用域就可以访问到的。按理说两个结果都应该是10啊!是我哪里搞明白?求指点

img


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