|
2 | 2 | - 预解释的不同机制 |
3 | 3 | - var的预解释机制 |
4 | 4 | - function的预解释机制 |
| 5 | +- 预解释机制 |
| 6 | +- in的用法 |
5 | 7 |
|
6 | 8 | ### 预解释的的不同机制 |
7 | 9 |
|
|
95 | 97 | fn();//window.fn() |
96 | 98 | console.log(a, b);//undefined 2 |
97 | 99 |
|
98 | | -### 毫无节操的预解释机制 |
| 100 | +### 预解释机制 |
99 | 101 |
|
100 | 102 | - 1、不管条件是否成立都要进行预解释 |
101 | 103 |
|
|
126 | 128 | } |
127 | 129 | fn2();//->"ok" |
128 | 130 |
|
129 | | - 预解释的时候:var fn; ->fn的默认值是undefined;这里即使有functon,也是不能进行进行预解释的 |
| 131 | +预解释的时候:var fn; ->fn的默认值是undefined;这里即使有functon,也是不能进行进行预解释的 |
130 | 132 |
|
131 | 133 | - 3、函数体中return下面的代码都不在执行了,但是下面的代码需要参加预解释;而return后面的东西是需要处理的,但是由于它是当做一个值返回的,所以不进行预解释; |
132 | 134 |
|
|
153 | 155 |
|
154 | 156 | 预解释: |
155 | 157 |
|
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 | + } |
173 | 167 |
|
174 | 168 | window下的预解释: |
175 | 169 |
|
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 |
205 | 174 |
|
206 | | - fn(); |
| 175 | +> 一个案例; |
207 | 176 |
|
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(); |
209 | 188 |
|
210 | | - ES6可以用let形成块级作用域;http://www.cnblogs.com/snandy/archive/2015/05/10/4485832.html |
| 189 | +JS中作用域只有两种: |
211 | 190 |
|
212 | | - 【in】:检测某一个属性名是否属于这个对象(不管是私有的属性还是公有的属性,只要是当前对象的属性返回true,不是的话返回false) |
| 191 | +- window全局作用域、 |
| 192 | +- 函数执行形成的私有作用域; |
| 193 | +- {name:""} if(){} for(){} while(){} switch(){} 这些都不会产生作用域; |
213 | 194 |
|
214 | | - var obj = {name: "王小波", age: 30}; |
| 195 | +ES6可以用let形成块级作用域;http://www.cnblogs.com/snandy/archive/2015/05/10/4485832.html |
215 | 196 |
|
216 | | - console.log("name" in obj);//->true |
| 197 | +【in】:检测某一个属性名是否属于这个对象(不管是私有的属性还是公有的属性,只要是当前对象的属性返回true,不是的话返回false) |
217 | 198 |
|
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