Jay*_*Sky 1 javascript closures scope
我对编程很新,但却无法理解一些基本概念.
我正在阅读这篇文章http://www.w3schools.com/js/js_function_closures.asp(我从另一个w3schools页面重定向到那里告诉我'避免全局变量').
但是,我无法真正理解闭包如何"击败"全局变量.
从我所看到和读到的,全局变量是危险的,因为任何脚本或用户都可以修改它们可能破坏代码功能.
无论如何 - 如果我们考虑来自链接的代码:
var add = (function () {
var counter = 0;
return function () {return counter += 1;}
})();
Run Code Online (Sandbox Code Playgroud)
如果我们考虑全局变量:
var counter = 0;
function add(){
counter = counter+1;
return counter;
}
Run Code Online (Sandbox Code Playgroud)
脚本比第二种情况更难以获取第一种情况?在两种情况下都不需要一行代码来改变变量吗?我唯一想到的就是在另一个函数中声明闭包,它会被执行,所以它只能在本地访问:
function exec(){
var add = (function () {
var counter = 0;
return function () {return counter += 1;}
})();
console.log(add());
}
Run Code Online (Sandbox Code Playgroud)
但我认为这不会起作用.
在第一种情况下,函数外部的代码add不能触及计数器.它们可以单独创建一个counter变量,但它与计数器使用的变量不同add,并且不会影响它的运算add.
在第二种情况下,触及全局的任何代码counter都能够影响其add操作.