在研究作用域的时候遇到一个问题,看代码:
<script>
name = 'globalName';
function funcA() {
console.log(name);
var name = 'funAName';
console.log(name);
}
funcA( );
//undefined
// funAName
</script>
上边第一次打印name的时候不是应该能访问到全局作用域的吗?为什么会出现undefined?下边的函数中为何又能访问到全局中的name了呢??
<script>
name = 'globalName';
function funcA() {
console.log(name);
name = 'funAName';
console.log(name);
}
funcA( );
//globalName
// funAName
</script>
这是函数声明提前的问题
```
function funcA() {
console.log(name);
var name = 'funAName';
console.log(name);
}
```
这样其实相当于
```
function funcA() {
var name;
console.log(name);
name = 'funAName';
console.log(name);
}
```
这里的name还是定义为函数内部的局部变量,所以第一次是undefined
但是当你函数内部定义函数没加var 的时候,name是全局变量,所以第一次调用的时候是全局的name,第二次则是函数内部赋值后的name