作用域和闭包
2017-07-17 本文已影响0人
Hathaway_桉
-
变量提升
图片.png
函数声明可以提前,函数表达式不可以提前。fn可以输出,fn1不可以。
<h1>题目:</h1>
图片.png<h1>知识点:</h1>
- 执行上下文
- this
this执行时的几种场景:
图片.png 图片.pngthis===zhangsan
this===A
this===window
在最后一种情况下,
图片.pngthis==={x:100}
图片.png上面这种方式的输出this==={y:200}
<h1>作用域</h1>
- js中没有块级作用域
- js只有全局作用域和函数作用域
<b>作用域链</b>
一个自由变量一直不断的向其父级作用域寻找作用域
图片.png
打印a的时候,函数里面没有定义a变量,因此找函数的父级作用域,即是全局作用域,找到了打印100。
<h1>闭包</h1>
图片.png闭包的实际应用场景:
图片.png
上述例子可以用_list来记录变量值,第一次记录了变量的值后,第二次来的时候显示false,进不去。这样就达到了收敛权限的作用。
- 说一下对变量提升的理解
-
变量提升
图片.png
-
函数声明可以提前,函数表达式不可以提前。fn可以输出,fn1不可以。
- 说明this几种不同的使用场景
-
创建10个a标签,点击的时候弹出来对应的序号
错误的写法,i会一直都是10。
图片.png
正确的写法:
var a,i;
for(i=0;i<10;i++){
(function(i){
a=document.createElement('a');
a.innerHTML=i+"<br>";
a.addEventListener('click',function(e){
e.preventDefault();
alert(i);
});
document.body.appendChild(a);
})(i);
}
- 如何理解作用域?
-
总结闭包的使用场景:
图片.png