以下代码执行结分别是什么?
var f = true;
if(f===true){
var a = 10;
}
function fn()
{
var b = 20;
c = 30;
}
fn();
console.log(a);
console.log(b);
console.log(c);
a=10; b is not defined ; c =30;
解析:“===”:等号两边必须完全相同,定义了f=true;所以执行f===true,是为真,则定义a=10;在Javascript中没有块级作用域,所以if语句中的变量可以被外部访问;
执行函数fn();的时候,在函数内部定义了一个变量b,这个变量只在函数内部有效,虽然Javascript中没有块级作用域,但是函数内部定义的变量,在外部无法被外部访问 的。而c=10;这里会产生变量提升,在程序的开头会自动补上var c; 在函数里只是给c进行了赋值操作,所以在外面任然可以访问c,并且此时的c=30.