IFE 2019年03月21日 分类: 前端知识体系 标签: javascript 浏览量: 1600
if (true) { var firstname = "Foo"; } console.log(firstname);// Foo if(true){ let lastname = "Bar" } console.log(lastname); // lastname is not defined
console.log("fn1")//undefined console.log(fn) // ƒ fn() {//声明} function fn () { //声明 } var fn1 = function () { //表达式 }
this要在执行时才能确认值,定义时无法确认
使用场景:
闭包:闭包是指有权访问另一个函数作用域中变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量,利用闭包可以突破作用链域,将函数内部的变量和方法传递到外部。
使用场景:函数作为返回值、函数作为参数传递。
应用一:创建10个a标签点击执行alert第几个
var i; for (i = 0; i < 10; i++) { (function (i) { //这里声明了10个函数 //函数作用域 var a = document.createElement('a'); a.innerHTML = i + '<br>'; a.addEventListener('click', function (e) { e.preventDefault(); alert(i); //i是自由变量,要去父作用域获取值 }) document.body.appendChild(a); })(i); }
应用二:判断first load
function isFirstLoad () { var _list = []; return function (id) { if (_list.indexOf(id) >= 0) { return false; } else { _list.push(id); return true; } } } var firstLoad = isFirstLoad(); firstLoad(10); //true firstLoad(10); //false firstLoad(20); //true firstLoad(20); //false //在 isFirstLoad 函数外面,根本不可能修改掉_list的值