[TOC]
eg1
变量提升
```
console.log(a); //undefined
var a = 12;
function fn(){
console.log(a);
var a = 13;
}
fn(); //undefined
console.log(a); //12
```
eg2
作用域链的超找
```
console.log(a); //undefined
var a = 12;
function fn(){
console.log(a);
a = 13;
}
fn(); //12
console.log(a); //13
```
eg3
作用域链的超找
```
console.log(a); //报错
a = 12;
function fn(){
console.log(a);
a = 13;
}
fn();
console.log(a);
```
eg4
判断体与提升
不管条件成立不成立都会提升,
但新版浏览器中只有条件成立,进入判断体后才会成立
```
var foo = 1;
function bar(){
if(!foo){
var foo = 10;
}
console.log(foo);
}
bar(); //10
```
---
eg5
提升与函数执行过程
```
var foo = 'hello';
(function(foo){
//=>私有作用域:foo='hello'(我们的foo和外面的foo是不同的变量)
console.log(foo); //hello
var foo = foo || 'world';
console.log(foo);//hello
})(foo); //=>把全局FOO的值当做实参传递给私有作用域中的形参
console.log(foo);//hello
```
eg6
作用域链,与函数执行
var a = 9;
function fn(){
a = 0;
return function (b){
return b+a++;
}
}
var f = fn();
console.log(f(5)); //会将a置为0//5
cosnole.log(fn()(5)); //会将a置为0//5
console.log(f(5)); //不会再将a置为0,此时a=1 //6
console.log(a); //2
```
eg7
私有变量和全局变量没有直接的关系,但是可能存在间接的关系
=>私有变量和全局变量都是引用数据类型的值,而且指向的是相同的堆内存
```
var ary = [1,2,3,4];
function fn(ary){
ary[0] = 0; //这里改变的第一个数组成员
ary = [0]; //这里指向了另一个地址
ary[0] = 100; //将新地址中的第一个成员设置为了100
return ary; //返回新地址
}
var res = fn(ary);
console.log(ary); //[0,2,3,4]
console.log(res); //[100]
```
![](https://box.kancloud.cn/8207d77dfa1a8b0000b38ba3b7bc65b3_1811x707.png)
eg8
```
function fn(i){
return function(n){
console.log(n + (--i));
}
}
var f = fn(2);
f(3); //4
fn(4)(5); //8
fn(6)(7); //12
f(8); //8
```
eg9
```
var num = 10;
var obj = {num:20};
obj.fn = (function(num){ //私有20
this.num = num*3; //全局num = 60;
num++; //私有21;
return function(n){
this.num += n; //全局65 //obj.num->30
num++; //私有22 //私有23
console.log(num);
}
})(obj.num);
var fn = obj.fn;
fn(5); //22
obj.fn(10); //23
console.log(num,obj.num); //65 30
```
- 空白目录
- window
- location
- history
- DOM
- 什么是DOM
- JS盒子模型
- 13个核心属性
- DOM优化
- 回流与重绘
- 未整理
- 文档碎片
- DOM映射机制
- DOM库封装
- 事件
- 功能组件
- table
- 图片延迟加载
- 跑马灯
- 回到顶部
- 选项卡
- 鼠标跟随
- 放大镜
- 搜索
- 多级菜单
- 拖拽
- 瀑布流
- 数据类型的核心操作原理
- 变量提升
- 闭包(scope)
- this
- 练习题
- 各种数据类型下的常用方法
- JSON
- 数组
- object
- oop
- 单例模式
- 高级单例模式
- JS中常用的内置类
- 基于面向对象创建数据值
- 原型和原型链
- 可枚举和不可枚举
- Object.create
- 继承的六种方式
- ES6下一代js标准
- babel
- 箭头函数
- 对象
- es6勉强笔记
- 流程控制
- switch
- Ajax
- eval和()括号表达式
- 异常信息捕获
- 逻辑与和或以及前后自增
- JS中的异步编程思想
- 上云
- 优化技巧
- 跨域与JSONP
- 其它跨域相关问题
- console
- HTML、XHTML、XML
- jQuery
- zepto
- 方法重写和方法重载
- 移动端
- 响应式布局开发基础
- 项目一:创意简历