日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Javascript高级程序设计第二版第七章匿名函数--笔记

發布時間:2023/12/20 java 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Javascript高级程序设计第二版第七章匿名函数--笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

匿名函數就是沒有名字的函數,有時候也稱為拉姆達(lambda)函數。

function functionName(){};

這是一個函數聲明

在代碼執行以前被加載到作用域中

var functionName = function(){};

這是一個函數表達式

在代碼執行到那一行時才會有定義

7.1 遞歸

arguments.callee是一個指向正在執行的函數的指針,可以實現函數的遞歸調用

function factorial(num){

???????? if(num <= 1){

?????????????????? return 1;

} else {

???????? return num * arguments.callee(num - 1);

}

}

var anotherFactorial = factorial;

factorial = null;

alert(anotherFactorial(4)); // output 24

7.2 閉包

閉包是指有權訪問另一個函數作用域中的變量的函數。創建閉包的常見方式,就是在一個函數內部創建另一個函數。

function fn(propertyName){

???????? return function(object1){

?????????????????? var v1 = object1[propertyName]; //訪問了外部變量propertyName變量

???????? }

}

由于閉包會攜帶包含它的函數的作用域,因此會比其他函數占用更多的內存,過度使用閉包可能會導致內存占用過多。所以建議只是在絕對必要時再考慮使用閉包。

7.2.1 閉包與變量

function createFunctions(){

???????? var result = [];

???????? for(var i=0; i<10; i++){

?????????????????? result[i] = function(num){

??????????????????????????? return function(){

???????????????????????????????????? return num;

??????????????????????????? }

?????????????????? }(i);

???????? }

}

var funcs = createFunctions();

for(var i=0; i<funcs.length; i++){

???????? document.write(funcs[i] + ‘<br />’); //output 0,1,2,3…9

}

7.2.2 this對象

this對象是在運行時基于函數的執行環境綁定的:在全局函數中,this等于window,而當函數被作為某個對象的方法調用時,this等于那個對象。不過,匿名函數的執行環境具有全局性,因此對象通常指向window.

7.2.3 內存泄漏

如果閉包的作用域中保存著一個HTML元素,那么就意味著該元素無法被銷毀。

function assignHandler(){

???????? var element = document.getElementById(‘someElement’);

???????? var id = element.id;

???????? element.onclick = function(){

?????????????????? alert(id);

???????? };

?

???????? element = null; //變量設置為null,才能解除對DOM對象的引用,順利減少引用數,確保正常回收其占用的內存

}

7.3 模仿塊級作用域

匿名函數可以用來模仿塊級作用域:

(function(){

???????? //這里是塊級作用域

})();

將函數聲明包含在一對圓括號中,表示它實際上是一個函數表達式,而緊隨其后的另一對圓括號會立即調用這個函數。

相當于:

var someFunction = function(){};

someFunction();

?

function(){}();

這一段會導致語法錯誤,因為JavaScriptfunction關鍵字當作一個函數聲明的開始,而函數聲明后面不能跟圓括號。然而,函數表達式的后面可以跟圓括號。要將函數聲明轉換成函數表達式,只要加上一對括號即可。

7.4 私有變量

任何在函數中定義的變量,都可以認為是私有變量。因為在函數外部不能訪問這些變量。

把有權訪問私有變量和私有函數的公有方法叫特權方法。

function MyObject(){

???????? //私有變量

???????? var privateVariable = 10;

???????? function privateFunction(){

?????????????????? return false;

???????? }

???????? //特權方法

???????? this.publicMethod = function(){

?????????????????? privateVariable ++;

?????????????????? return privateFunction();

???????? }

}

7.4.1 靜態私有變量

(function(){

???????? var privateVariable = 10;

???????? function privateFunction(){

??????????????????

???????? }

???????? Myobject = function(){??????????????

???????? }

//公有/特權方法

???????? Myobject.prototype.publicMethod = function(){

?????????????????? privateVariable ++;

?????????????????? return privateFunction();

???????? }

})()

這個模式創建了一個私有作用域,并在其中封裝了一個構造函數及相應的方法。

7.4.2 模塊模式

單例創建私有變量和特權方法。所謂單例就是只有一個實例的對象。簡單的語法如下:

var singleton = {

???????? name: value,

???????? method: function(){

//這里是方法

}

}

還可以添加私有變量和特權方法

var singleton = function(){

???????? //私有變量和私有函數

???????? var privateVariable = 10;

???????? function privateFunction(){}

???????? //特權/公有方法和屬性

???????? return {

???????? publicProperty: true,

???????? publicMethod: function(){

???????? privateVariable++;

???????? return privateFunction();

}

}

}

這個模式返回了一個匿名函數,在函數內部,定義私有變量和函數,然后將一個對象字面量作為函數的值返回。返回的對象字面量中只包含可以公開的屬性和方法。

7.4.3 增強的模塊模式

var singleton = function(){

???????? //私有變量和私有函數

???????? var privateVariable = 10;

???????? function privateFunction(){

???????? return false;

}

//創建對象

var object = new CustomType();

//添加特權/僅有屬性和方法

object.publicProperty = true;

object.publicMethod = function(){

???????? privateVariable++;

???????? return privateFunction();

};

return object;

}

轉載于:https://www.cnblogs.com/jikey/archive/2010/10/07/1802068.html

總結

以上是生活随笔為你收集整理的Javascript高级程序设计第二版第七章匿名函数--笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。