> [带var]
> 在当前作用于中声明了一个变量,如果当前是全局作用域,也相当于给全局作用域设置了一个属性叫做a
```javascript
//=>变量提升:var a; <=>window.a=undefined;
console.log(a);//undefined
var a = 12;
console.log(a);//12
console.log(window.a);//window['a']在‘全局作用域’中,我们声明了一个变量,相当于全局对象window增加了一个属性名
```
> [不带var]
> 在全局作用域中,如果不带var,仅仅是给全局对象设置了一个新的属性名(把window.省略了)
```javascript
// console.log(a);//=>Uncaught ReferenceError: a is not defined
a = 12;//<=>window.a=12
console.log(a);//=>12
console.log(window.a);//=>12
```
window.setInterval();//window.可以省略
window.document.getElementById();//window.可以省略
> 项目中,如果你的目的是创建变量,最好不要省略var,这样会严谨一些
### 作用域链
> 函数执行形成一个私有的作用域(保护私有变量),进入到私有作用域中,首先变量提升(声明过的变量是私有的),接下来代码执行
> 1、执行的时候遇到一个变量,如果这个变量是私有的,那么按照私有变量处理即可;
```javascript
function fn() {
//=>私有作用域
//变量提升:var a;(私有变量)
console.log(a);//->undefined
var a = 12;
console.log(a);//->12
}
fn();
console.log(a);//->Uncaught ReferenceError: a is not defined 闭包机制:私有作用域保护里面的私有变量不收外界的干扰不收外界的干扰
```
> 2、如果当前这个变量不是私有的,我们需要向它的上级作用域进行查找,上级如果也没有,则继续向上查找,一直找到window全局作用域为止,我们把这种查找机制叫做**`作用域链`**
> 1)如果上级作用域有,我们当前操作的都是上级作用域中的变量(假如我们在当前作用域把值改了,相当于把上级作用域中的这个值给修改了)
> 2)如果上级作用域中没有这个变量(找到window也没有);
> 变量 = 值:相当于给window设置了一个属性,以后再操作window下就有了
 
例子:
//=>变量提升:var x;var y; fn=>aaafff111
console.log(x, y);
var x = 10,
y = 20;
function fn() {
//=>[私有作用域]
//=>变量提升:var x;(x是私有变量)
console.log(x, y);//=>undefined 20
var x = y = 100;//=>x=100(私有)y=>100(全局)
console.log(x, y);//=>100 100
}
fn();
console.log(x, y);//=>10 100
 
结果:
undefined undefined
undefined 20
100 100
10 100
 
注意事项:

// var x = 10,y=10;等同于 var x = 10;var y =10;
// var x = y = 100;
// var x = 100;(私有)
// y = 100;//->此处的y是不带var的(全局)
```javascript
function fn(){
a = 12;
console.log(a);//->12
}
fn();
console.log(a);//->12
```

最新文章

  1. c#事件机制
  2. 解决Android SDK下载和更新失败的方法(Win系统) 和离线安装
  3. Eclipse如何替换android应用图标
  4. INNO setup安装卸载钱判断进程中是否在运行总结
  5. iis6.0+.net 4.0 +mvc 404错误
  6. 小米pad MI PAD 开发者选项、USB调试开启方式
  7. Centos环境下Tomcat启动缓慢
  8. Python自动化运维之17、Python操作 Memcache、Redis、RabbitMQ
  9. 载入OpenSSL的动态库——学会使用tryToLoadOpenSslWin32Library和QPair
  10. maven简单工具命令
  11. POJ1811_Prime Test【Miller Rabin素数测试】【Pollar Rho整数分解】
  12. HDU 5810 Balls and Boxes
  13. tap穿透之zepto的bug
  14. MySQL EXPLAIN 命令: 查看查询执行计划
  15. 一、I/O操作(中文问题)
  16. Lambda学习---方法引用和其他基本应用
  17. Microsoft Dynamics CRM 常用JS语法(已转成vs2017语法提示)
  18. 最小生成树(kruskal模版 Prim模板)
  19. StructuredStream StateStore机制
  20. mysql 内连接原理

热门文章

  1. python 网络编程之socket开发和socketserver模块
  2. (转)WordPress常用模板函数 修改或自制WordPress主题必备
  3. redis 持久化之 rdb 快照持久化
  4. 【转载】伪静态SQL注入
  5. Oracle数据库调优总结
  6. linux系统挂载U盘,中文文件名乱码解决方案
  7. redis的数据类型(一) key操作
  8. 关于cmder 目录右键打开当前目录的方法
  9. 一个简单的json解析器
  10. Python——第一个python程序helloworld