看下面代码:
for(var i = 0;i < 3 ;i++){ } console.log(i); //3
由上述代码可以看出JavaScript没有块级作用域,只有函数作用域
下面继续看代码:
var x = 'old'; console.log(y); // Uncaught ReferenceError: y is not defined if(function y(){}){ if(y){ x = 'new'; } } console.log(x);
上述代码稍微改下:
var x = 'old'; if(function y(){}){ x += typeof y; } console.log(x); // oldundefined
自解:
由于JavaScript没有块级作用域,所以if内函数声明会变量提升,所以第一段代码输出应该如下:
undefined old
第二段代码输出应该如下:
oldfunction
析:
if内语句function y(){}不被认为是函数声明,而是转为true,因此y未被定义
参考文章:
JavaScript系列文章:自动类型转换