Skip to content

Commit 0246233

Browse files
committed
作用域
1 parent f124e1d commit 0246233

5 files changed

Lines changed: 481 additions & 65 deletions

File tree

img/作用域链查找.jpg

76.8 KB
Loading

img/作用域链查找.psd

287 KB
Binary file not shown.

test-file.html

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,15 @@
77
<title>Document</title>
88
</head>
99
<body>
10+
<div id="div1"></div>
1011
<script>
11-
var name="window name"
12-
function sum(num1, num2){
13-
var name="sum name"
14-
console.log(this.name,num1,num2);
15-
}
16-
function callSum2(num1, num2){
17-
var name="callSum2 name"
18-
sum.call(this, num1, num2); // 传入单个的参数
19-
}
20-
callSum2(10,30); //window name 10 30
12+
13+
14+
var i = 5;
15+
console.log(1 + i++);//6
16+
console.log(1 + (++i));//8
17+
console.log(2 + (i++) + (++i) + (++i) + (i++));//38
18+
console.log(i);//11
2119

2220
</script>
2321
</body>

预解释-作用域-this关键字-闭包/1.预解释的原理.md

Lines changed: 38 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
- 预解释的不同机制
33
- var的预解释机制
44
- function的预解释机制
5+
- 预解释机制
6+
- in的用法
57

68
### 预解释的的不同机制
79

@@ -95,7 +97,7 @@
9597
fn();//window.fn()
9698
console.log(a, b);//undefined 2
9799

98-
### 毫无节操的预解释机制
100+
### 预解释机制
99101

100102
- 1、不管条件是否成立都要进行预解释
101103

@@ -126,7 +128,7 @@
126128
  }
127129
  fn2();//->"ok"
128130

129-
  预解释的时候:var fn; ->fn的默认值是undefined;这里即使有functon,也是不能进行进行预解释的
131+
预解释的时候:var fn; ->fn的默认值是undefined;这里即使有functon,也是不能进行进行预解释的
130132

131133
- 3、函数体中return下面的代码都不在执行了,但是下面的代码需要参加预解释;而return后面的东西是需要处理的,但是由于它是当做一个值返回的,所以不进行预解释;
132134

@@ -153,66 +155,47 @@
153155

154156
  预解释:
155157

156-
  var fn; 声明
157-
158-
  fn = xxxfff000; [声明]不要了+定义
159-
160-
  fn = xxxfff111; [声明]不要了+定义
161-
162-
  ->fn=xxxfff111
163-
164-
  var fn = 12;//window.fn=12
165-
166-
  function fn() {//window.fn=function(){}
167-
168-
  }
169-
170-
  function fn() {
171-
172-
  }
158+
var fn; 声明
159+
fn = xxxfff000; [声明]不要了+定义
160+
fn = xxxfff111; [声明]不要了+定义
161+
->fn=xxxfff111
162+
var fn = 12;//window.fn=12
163+
function fn() {//window.fn=function(){}
164+
}
165+
function fn() {
166+
}
173167

174168
  window下的预解释:
175169

176-
  fn=xxxfff111; 声明+定义
177-
178-
  var fn; 声明 (这一步不需要处理)
179-
180-
  fn=xxxfff222; 声明+定义(只需要执行定义即可)
181-
182-
  ->fn=xxxfff222
183-
184-
  一个案例;
185-
186-
  fn();//->2
187-
188-
  function fn() {
189-
190-
  console.log(1);
191-
192-
  }
193-
194-
  fn();//->2
195-
196-
  var fn = 13;//var fn;跳过 fn=13(在预解释的时候没有执行这句话赋值的操作)
197-
198-
  fn();//->13() Error:fn is not a function
199-
200-
  function fn() {
201-
202-
  console.log(2);
203-
204-
  }
170+
fn=xxxfff111; 声明+定义
171+
var fn; 声明 (这一步不需要处理)
172+
fn=xxxfff222; 声明+定义(只需要执行定义即可)
173+
->fn=xxxfff222
205174

206-
  fn();
175+
> 一个案例;
207176
208-
  JS中作用域只有两种:window全局作用域、函数执行形成的私有作用域;{name:""} if(){} for(){} while(){} switch(){} 这些都不会产生作用域;
177+
fn();//->2
178+
function fn() {
179+
console.log(1);
180+
}
181+
fn();//->2
182+
var fn = 13;//var fn;跳过 fn=13(在预解释的时候没有执行这句话赋值的操作)
183+
fn();//->13() Error:fn is not a function
184+
function fn() {
185+
console.log(2);
186+
}
187+
fn();
209188

210-
  ES6可以用let形成块级作用域;http://www.cnblogs.com/snandy/archive/2015/05/10/4485832.html
189+
JS中作用域只有两种:
211190

212-
  【in】:检测某一个属性名是否属于这个对象(不管是私有的属性还是公有的属性,只要是当前对象的属性返回true,不是的话返回false)
191+
- window全局作用域、
192+
- 函数执行形成的私有作用域;
193+
- {name:""} if(){} for(){} while(){} switch(){} 这些都不会产生作用域;
213194

214-
  var obj = {name: "王小波", age: 30};
195+
ES6可以用let形成块级作用域;http://www.cnblogs.com/snandy/archive/2015/05/10/4485832.html
215196

216-
  console.log("name" in obj);//->true
197+
【in】:检测某一个属性名是否属于这个对象(不管是私有的属性还是公有的属性,只要是当前对象的属性返回true,不是的话返回false)
217198

218-
  console.log("height" in obj);//->false
199+
var obj = {name: "王小波", age: 30};
200+
console.log("name" in obj);//->true
201+
console.log("height" in obj);//->false

0 commit comments

Comments
 (0)