国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

js的匿名函數使用介紹

2024-05-06 15:57:13
字體:
來源:轉載
供稿:網友
匿名函數的作用是創建一塊封閉區域,外面不能夠訪問里面的變量和方法,下面為大家介紹下什么是匿名函數及其如何使用

1.匿名函數概述

關于匿名函數的第一次認識還是在jquery源碼里,打開jQuery首先看到的是

復制代碼 代碼如下:


(function( window, undefined ) {.......................})(window);


這就是一個匿名函數,紅色為參數,匿名函數的作用是創建一塊封閉區域,外面不能夠訪問里面的變量和方法。

既然不能訪問,那怎么能調用jquery?這是因為jquery的匿名函數有這樣兩句話(藍色字):

復制代碼 代碼如下:


(function( window, undefined ) {

// Define a local copy of jQuery
var jQuery = function( selector, context ) {
// The jQuery object is actually just the init constructor 'enhanced'
return new jQuery.fn.init( selector, context );
},

.........

window.jQuery = window.$ = jQuery;

})(window);


原來在匿名函數里將jQuery傳給了window,這也就是為什么參數的傳遞中要傳遞window,所以以后每次調用jquery其實是調用window的jQuery這個對象。

由jquery調用自己里面的方法。外面是無法調用的,這樣可以保證安全和不沖突。

2.接著上面的話題,關于jQuery的插件

以下是我寫的分頁控件的部分代碼:

復制代碼 代碼如下:


;(function ($) {

$.fn.tabing = function (arg) {
instance = new Plugin(this, arg);
};
var instance = null;
function Plugin(element){
this._tabs = $(element);

this._tabli = $("a[href*='#']",this._tabs);
this._tabDiv = this._tabs.siblings().filter("div[id*='tab']");
this.init();
}
Plugin.prototype = {
init: function(){
this._tabli.addClass("unselected");
this._tabli.eq(0).addClass("selected");
this._tabDiv.css("display","none");
this._tabDiv.eq(0).css("display","block");
this._tabli.each(function(){
$(this).bind("click",function(){
for(var i = 0;i<instance._tabDiv.length;i++){
instance._tabDiv.eq(i).css("display","none");
}
instance._tabDiv.filter("#"+$(this).attr("href").split('#')[1]).css("display","block");
});
})
}
}

})(jQuery);


注意紅色的字,其實jQuery插件也是在寫匿名函數,這樣保證每個插件的獨立性,要不怎么叫插件,紅色的字$.fn.tabing說明在這個插件里面有個tabing給了jquery的fn,

這樣外面的jquery對象就可以直接調用tabing,這也是插件與外界的唯一接觸。

3. 說完了jquery插件對匿名函數的使用,再說一下window的匿名函數

其實jquery本身就是window的匿名函數,即第一點,那我們怎么寫window的匿名函數呢?

即寫了匿名函數后,在函數里面有個與window交互的接口,例如下面:

復制代碼 代碼如下:


(function(){
function getObjByID(id){
return document.getElementById(id);
}
function __addClass(id,className,classValue){
$(id).style.className=classValue;
}
window.addClass=__addClass;
})();


同樣是看紅色的字,這樣在該匿名函數外就可以調用addClass(),但無法調用getObjByID()。

4.匿名函數也會在解析的時候執行

如下:

復制代碼 代碼如下:


function Video() { };
function Movie() { };

var _video = new Video();
_video.size = 3;
_video.toString = function () {
return "video";
};
_video.getName = function () {
return "VideoXXX";
};
var _movie = new Movie();
(function (parent, child) {
for (var ele in parent) {
if (!child[ele]) //在child不包含該屬性或者方法的時候,才會拷貝parent的一份
child[ele] = parent[ele];
}
})(_video, _movie); //匿名函數調用的方式

alert(_movie.size); //3
alert(_movie.toString()); //[object Object]
alert(_movie.getName()); //VideoXXX


三個alert都有結果,說明了匿名函數內部執行了。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 靖安县| 通化县| 神农架林区| 明水县| 玉溪市| 涞水县| 武宣县| 临漳县| 嘉黎县| 泾源县| 霍州市| 博乐市| 布拖县| 和平县| 瑞安市| 乌什县| 潮州市| 秭归县| 安图县| 安阳县| 太白县| 六安市| 禹城市| 凤庆县| 阿巴嘎旗| 大田县| 镇平县| 济南市| 江油市| 加查县| 阿克苏市| 松滋市| 萍乡市| 崇义县| 陇川县| 东山县| 建宁县| 凤城市| 休宁县| 锡林浩特市| 曲阳县|