function test(){
for(var i=0;i<3;i++){
var what = "haha";
} console.log(what);
}
test();
上面这个打印what可以出来haha
function enen(){
var that = "lala";
}
console.log(that);
这个则打印不出来,显示that未定义
疑问:
that是放在enen()函数里面的,外部不可访问我理解。
what不也是放在 test()函数里面的吗?难道what外层加了个for循环,就不算包含在test()里面了?
关于第一个函数: console.log(what); 语句访问what变量,此时what虽然在for循环里面,但是它们在同一个作用域里面啊(test函数对应的作用域)。
关于第二个函数: what在enen作用域里,而console.log(what)访问的what是从enen作用域外检索的,所以检索不到,结果未定义咯。
如果第一个函数按照下面方式写,打印出的what也是未定义:
最后,纠正下@Carlis_Liu的一句描述: js能划分作用域的只有function 。 这是不正确的,开辟作用域的还有 with、try....catch等