块级作用域和函数作用域

看下面代码:

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系列文章:自动类型转换

此条目发表在JavaScript分类目录。将固定链接加入收藏夹。

发表评论

邮箱地址不会被公开。 必填项已用*标注