为什么闭包比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中声明的计数器变量,现在不能再由除内部函数以外的任何操作。