fed icon indicating copy to clipboard operation
fed copied to clipboard

【资源贴】作用域与闭包

Open zptcsoft opened this issue 6 years ago • 2 comments

目的

下次课我们将学习Javascript里的作用域与闭包,希望大家可以在下次课前,自主学习相关知识点。

要求

  1. 了解JS作用域
  2. 函数级作用域
  3. 闭包与封装

资源

  1. 课程讲义
  2. 作用域与闭包
  3. 书写高效JS 的第二章
  4. JS样式指南中的变量提升
  5. MDN闭包
  6. 变量提升 #337

练习

  1. 示例效果
  2. 拓展练习

zptcsoft avatar Sep 25 '18 21:09 zptcsoft

//立即调用函数表达式  IIFE
//可自动执行的匿名函数
//封装代码
(function(){
	var i=1;
	console.log(i);
})();

zptcsoft avatar Sep 26 '18 01:09 zptcsoft

<div class="k">
	<input type="button" value="1"/>
	<input type="button" value="2"/>
	<input type="button" value="3" />
	<input type="button" value="4" />
	<input type="button" value="5" />
	<input type="button" value="6" />
</div>
var oBtnList=document.getElementsByTagName("input");
//错误
for (var i = 0; i < oBtnList.length; i++) {
	oBtnList[i].addEventListener("click",function(){
		console.log("你单击了第"+i+"个按钮");
	})
}
//闭包
for (var i = 0; i < oBtnList.length; i++) {
	oBtnList[i].addEventListener("click",(function(index){
		return function(){
			console.log("你单击了第"+index+"个按钮");
		}
	})(i));
}
//闭包2
for (var i = 0; i < oBtnList.length; i++) {
	(function(j){
		oBtnList[j].addEventListener("click",function(){
			console.log("你单击了第"+(j+1)+"个按钮");
		});
	})(i);
}
//不用闭包
for (var i = 0; i < oBtnList.length; i++) {
	//let可以赋予变量块级作用域
        let j=i;
	oBtnList[j].addEventListener("click",function(){
		console.log("你单击了第"+(j+1)+"个按钮");
	});
}

zptcsoft avatar Sep 26 '18 03:09 zptcsoft