闭包的观念,其实就和前几天谈到的作用域、变数宣告和作用域的观念有关。只要有清楚知道其中差异,在理解闭包上就也能够透过范例轻松理解了~。
我们主要是要认识作用域,理解变数所能够被存取的范围,所以范例中,我们要去注意变数money
money=1000
money - price
,而他能向外取用到 money = 1000
的值price=100
,执行 1000-100
function callMethod() {
var money = 1000;
return function (price) {
money = money - price;
return money;
}
}
let myMoney = callMethod()(100); // 存取内部函式的变数
console.log(myMoney);
为何要宣告变数 let myMoney = callMethod()(100);
若直接呼叫callMethod()
,都是回传函式
所以透过宣告新的变数,将callMethod()
中的function存到变数 myMoney 中,并让该变数可以执行。
function callMethod() {
var money = 1000;
changeMoney = function () {
money = 500;
}
return function (price) { // 这里就是一个闭包,不过目前只会使用一次
money = money - price;
return money;
}
}
let updateMyMoney = callMethod(); // 存取内部函式的变数
console.log(updateMyMoney(100));
money - price
changeMoney()
之後,money = 500
,带入参数後,也会从500去扣让一个函式可以存取多个变数,并且能够分别执行函式中的任务
MyMoney
YourMoney
,并传入不同数值
function callMethod(newMoney) {
var money = newMoney || 1000;
return function (price) {
money = money - price;
return money;
}
}
let MyMoney = callMethod(500);
let YourMoney = callMethod(1000);
console.log(MyMoney(100));
console.log(YourMoney(100));
上述有提及因变数在全域环境的关系,所以在呼叫changeMoney时,要取得的值会被覆盖。
在 ES6 透过 let 它可以帮我们把所定义的变数缩限在 block scoped 中,简单说就是{}
来区隔。
自己的学习习惯,会透过影片课程中老师的解说,而自己边做笔记、或是跟着范例进行操作,来加深自己的记忆,并透过反覆思索能够更加理解内容。此外即便看过影片,也做完笔记,有时还会去搜寻 MDN 或是其他部落格文章,看看其他人用什麽角度来说明观念。
<<: Day7-在认识 useMemo 前,先认识 React.memo
接者用高斯滤波器为例子,接者会对其权重参数(weighting, coefficient)讨论~ 所...
昨天,我们介绍了指标的一些小概念,不知道读者们是否有比较清楚指标是甚麽东西呢?(我自己在学的时候,会...
先前在「CI/CD从这里:设定第一个Pipeline(范本与编辑介面介绍)」这篇文章内容建立Pipe...
像gunicorn 及docker 有着执行时timeout的防止错误发生的机制, 但是要是超过了 ...
此系列文章会同步发文到个人部落格,有兴趣的读者可以前往观看喔。 测试脚本中有许多测试用例时,当需要...