全局作用域(全局变量):
1.最外层函数和在最外层函数外面定义的变量拥有全局作用域,/函数本身也是一个特殊的变量,其名字就是函数名字;
2.未定义直接赋值的变量自动声明为拥有全局作用域;
3.所有window对象的属性拥有全局作用域,例如:window对象的内置属性都拥有全局作用域,例如window.name、window.location、window.top等;我们也可以通过如下方式定义一个全局变量windowwindow.name=11;
代码执行:先生成一个执行环境,再执行
1.执行环境类似一个表格:第一行放置全局变量,第二行放置局部变量;
2.变量搜索机制:先搜索局部变量,如果没找到,搜索全部变量;
题目:
1 var v = "hello"; 2 function test (){ 3 console.log(v); 4 var v = "world"; 5 }
这行代码的执行结果:undefined;
这段代码说明了两个问题,
第一,function作用域里的变量v遮盖了上层作用域变量v。
第二,在function作用域内,变量v的声明被提升了。所以最初的代码相当于:
1 var v = "hello"; 2 function test (){ 3 var v; //声明一个变量 声明提升,但是不会被赋值 4 console.log(v); 5 v = "world"; 6 }