define highlight 全局 向上 不能 efi 访问 turn
1. 函数中定义的变量只在函数中起作用,所以两个函数定义相同的变量互不影响
- function fun(){
- var i=0
- }
- console.log(i);//i is not defined
2. 函数中内嵌函数时,内部的函数可以访问外部函数的变量,外部函数则不能访问内部的变量
- function fun(){
- var i=0;
- function fun2(){
- var j=1;
- console.log(i);
- }
- fun2();
- }
- fun();//0
- function fun(){
- var i=0;
- console.log(j)
- function fun2(){
- var j=1;
- console.log(i);
- }
- fun2();
- }
- fun();//j is not defined
3. 当内部函数与外部函数定义同样的变量的时候,内部函数会把外部函数的变量覆盖掉,所以变量查找,都会先在当前作用域中查找,如果找不到会不停的向上查找,最后如果在全局作用域中也没有找到,则报 ReferenceError 错误。
4. 因为 js 会提升变量声明,不会提升变量赋值,因此在变量声明前使用变量也不会报错,因此最好在函数内部首先申明所有变量
5. 减少命名冲突的办法,是把所有的变量和方法都绑定到自己的全局变量上
- // 唯一的全局变量MYAPP:
- var MYAPP = {};
- // 其他变量:
- MYAPP.name = 'myapp';
- MYAPP.version = 1.0;
- // 其他函数:
- MYAPP.foo = function () {
- return 'foo';
- };
6.let 可以声明一个块级作用域,const 可以定义常量
js 随笔 - 变量作用域
来源: http://www.bubuko.com/infodetail-2150652.html