直接 return
var a = 0;
function fn() {
var a = 12;
return a;
}
var i = fn;
console.log(i());
console.log(a);
// 12
// 0
闭包
var a = 0;
function fn() {
var a = 12;
return function() {
return a;
}
}
var i = fn();
console.log(i());
console.log(a);
// 12
// 0
区别
👉👉👉传送门:javascript 闭包问题,为什么要写成闭包的形式?
- 直接 return 返回的是变量,闭包返回的是执行环境;
- 闭包不是为了让函数外部拿到内部变量。而是为了保护私有变量不被随意修改;
- return 出来的是一个值,不是变量本身,此处的 return 是取得私有变量值的一种方法,跟闭包没有严格关系;
- 闭包作为一个可以访问函数内部变量的函数,更多的是可以在其中添加其他的条件,过滤无效的值。如果直接return 变量,然后赋值的话,还要在后续去判断这个值的有效性。