JavaScript为什么不直接将函数的内部变量return出来,而是要通过闭包的方式来实现获取内部变量?
看到有人说防止函数内部变量被修改,有点不理解。
JavaScript为什么不直接将函数的内部变量return出来,而是要通过闭包的方式来实现获取内部变量?
看到有人说防止函数内部变量被修改,有点不理解。
因为除了获取变量,还有改变变量的操作. 如果直接用func.key的方式来获取的话,就能被同样的方式 func.key = xx
修改。 所以如果要修改该变量,也应该调用函数给的方法来实现
就是跟你说的一样,防止函数内部的某个变量被改变,所以只提供给外部get的方法,而不提供set的方法。
const internal = (function() {
var a = "your name";// 此处很重要
return {
getA() {
return a;
},
// setA(newA) {
// a = newA;
// }
};
})();
你是不是就不想暴露出来a让外部修改
按我的理解,JS里的函数其实也是一个对象。其内部的变量都是public的,所以外部就可以直接修改这个函数(对象)的变量。
用闭包的话,函数外部就不能直接那样访问了,而是根据你公开的一些方法来操作其内部变量。
看具体场景吧,在什么场景下你需要获取函数内部变量呢?
有的场景里,就是通过函数内部变量return出来。而且这种场景,其实也是利用了闭包。
而你说的利用闭包的方式,也许只是讲解闭包的例子才这么用吧
8 回答4.8k 阅读✓ 已解决
6 回答3.5k 阅读✓ 已解决
5 回答2.9k 阅读✓ 已解决
5 回答6.4k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
在函数里,如果直接return,比如说
如果是这种形式,那么我们可以直接通过以下方式获取你的账号,甚至于修改你的账号
因为JS没有私有变量,所以我们只能通过闭包的方式,将账户这种不想暴露出去的信息限制在函数里
如果通过这种形式,那么就将account这个账号信息限制在fun2函数里才能去做的操作
这里只是举个账号的例子,然后类似的还有很多,闭包可以将不想暴露出去的信息限制起来,防止外界调用。
实际上,也会有这种情况。 比如甲方提供给乙方的API,就只需要暴露出甲想提供的东西,对于他们内部使用的一些信息都可以有效的保护起来。