<script>var name = "The Window";var object = {name : "My Object",getNameFunc : function(){console.log("11111");console.log(this); //this == object //調用該匿名函數的是對象return function(){console.log("22222");console.log(this); //this == window //匿名函數下的匿名函數return this.name;};}};alert(object.getNameFunc()());//--var name = "The Window";var object = {name : "My Object",getNameFunc : function(){var that = this;return function(){console.log("33333");console.log(this); //this==windowconsole.log("44444");console.log(that); //that==objectreturn that.name;};}};alert(object.getNameFunc()());</script>
?
function makeFunc() {var name = "Mozilla";function displayName() {alert(name);}return displayName; //返回一個函數 } var myFunc = makeFunc(); //把函數返回值賦值給myFunc console.log(myFunc); //輸出函數內容 myFunc();//調用函數
?
function makeAdder(x) {return function (y) { //返回一個函數return x + y; //返回值 }; } var add4 = makeAdder(); //無傳參函數返回值console.log("//無傳參函數返回值");console.log(add4);//輸出函數體console.log(add4(2)); //NaN Number.NaN 是一個特殊值,說明某些算術運算(如求負數的平方根)的結果不是數字var add5 = makeAdder(5); //把函數返回值賦值給add5,console.log("//有參函數返回值");console.log(add5);//輸出函數體console.log(add5(2));//7
?
var Counter1 = (function () { })();console.log("輸出立即調用函數返回值Counter1");console.log(Counter1); //undefinedvar Counter2 = (function () { var privateCounter = 0; })();console.log("輸出立即調用函數返回值Counter2");console.log(Counter2); //undefinedvar Counter3 = (function () {var privateCounter = 0;function changeBy(val) {privateCounter += val;}})();console.log("輸出立即調用函數返回值Counter3");console.log(Counter3); //undefined //--var Counter4 = (function () {var privateCounter = 0;function changeBy(val) {privateCounter += val;}return {value: function () {return privateCounter;}}})();console.log("輸出立即調用函數返回值Counter4");console.log(Counter4); //{value: ?} //類型object
?
var Counter = (function () {var privateCounter = 0;function changeBy(val) {privateCounter += val;}return {increment: function () {changeBy(1);},decrement: function () {changeBy(-1);},value: function () {return privateCounter;}} })(); console.log(Counter.value()); /* logs 0 */ //返回0 Counter.increment(); //執行0+1 Counter.increment(); //執行1+1 console.log(Counter.value()); /* logs 2 */ //輸出2 Counter.decrement(); //執行2+(-1) console.log(Counter.value()); /* logs 1 */ //輸出1
?https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures