闭包
当内层函数使用的参数是外层函数的局部变量时,编译器为这个变量创建一个闭包。
1、局部变量
function myFunction() { var a = 4; return a * a; }
2、全局变量:在web页面中全局变量属于 window 对象,全局变量可应用于页面上的所有脚本。
var a = 4; function myFunction() { return a * a; }
3、修改局部变量不会影响全局变量,即使局部变量和全局变量名称相同。A:25,b:16
<body> <p>函数可以访问定义在函数外的变量:</p> <button type="button" onclick="myFunction()">A</button> <button type="button" onclick="myFunction1()">B</button> <p id="demo"></p> <script> var a = 4; function myFunction() { var a=5; document.getElementById("demo").innerHTML = a * a; } function myFunction1() { document.getElementById("demo").innerHTML = a * a; } </script>
4、私有变量
var counter = 0; function add() { return counter += 1; } add(); add(); add();
counter计数,虽然可以计数,但是其他函数也可以修改counter。
可以用内嵌函数
function add() { var counter = 0; this.plus = function () { return ++counter; } return this.plus; } var fun = new add(); console.log(fun()); console.log(fun());
function add() { var name = 0; this.plus = function () { name = name + 1; } this.get = function () { return name; } } var a = new add(); a.plus(); // 1 a.plus(); // 2 console.log(a.get());