为什么闭包比JavaScript中的全局变量更安全?
问题描述:
我很新的编程,但不能理解一些基本概念。 (我从另一个w3schools页面重定向到告诉我'避免全局变量')。为什么闭包比JavaScript中的全局变量更安全?
但是,我真的不明白如何关闭“击败”全局。
从我所看到和阅读的内容来看,全局变量是危险的,因为任何脚本或用户都可以修改它们,可能会破坏代码功能。
Anyway-如果我们考虑代码的链接:
var add = (function() {
var counter = 0;
return function() {return counter += 1;}
})();
如果我们考虑到全局变量:
var counter = 0;
function add(){
counter = counter+1;
return counter;
}
如何是第一种情况少用脚本比第二访问?这两种情况下都不需要一行代码来更改变量吗?即来到我的脑海里的唯一的事情是在它被执行另一个函数声明关闭,因此它成为唯一的本地访问:
function exec(){
var add = (function() {
var counter = 0;
return function() {return counter += 1;}
})();
console.log(add());
}
但我不认为这会做的工作。
答
在第一种情况下,代码外add
功能不能触摸计数器。他们可以单独创建一个counter
变量,但它与add
使用的计数器不同,并且不会影响add
的操作。
在第二种情况下,任何触及全球counter
的代码都将能够影响add
的操作。
答
您可能会丢失的是第一个添加函数被立即执行。这由其声明后的括号表示。例如:
var something = function(){}();
由于这种立即执行返回函数,附加变量现在表示返回的函数设置为0,计数器的变量(其也包括在立即执行功能)。
因为它是在一个函数中声明的,所以该计数器变量现在只对该函数可见,并且因此被保护以防被程序中稍后声明的任何其他计数器变量覆盖。
现在添加的调用运行内部函数,使用在add中声明的计数器变量,现在不能再由除内部函数以外的任何操作。