摘要:大家想想怎么做什么是匿名函數(shù)自執(zhí)行并如何在實際庫中應(yīng)用匿名函數(shù)自執(zhí)行,注意,注意,只有這個名字和沒有其它名字,比如封閉空間,這個是為了讓大家好理解自己造的詞語。
通過本節(jié)課你將學(xué)到:
概述1.什么是函數(shù)表達(dá)式和函數(shù)聲明
2.first-class function
3.引用和復(fù)制的區(qū)別
4.函數(shù)傳參是怎么回事兒
5.關(guān)于函數(shù)的this和arguments
6.什么是匿名函數(shù)自執(zhí)行并如何在實際庫中應(yīng)用
7.閉包是怎么回事兒?
8.閉包的原理和在jquery中的應(yīng)用
9.從一到面試題徹底理解閉包和垃圾回收機(jī)制
10.回調(diào)函數(shù)是什么?
在javascript中,有些看起來很復(fù)雜卻又很好理解的東西,但是理解他們需要一定的技巧同時理解他們又非常的重要,了解了他們就給你打開了一扇門,讓你知其然還能夠知其所以然。因為他們緊密結(jié)合,自成一體。今天我們來說說這些既簡單有重要的東西。
1.什么是函數(shù)表達(dá)式和函數(shù)聲明? 大家已經(jīng)知道函數(shù)就是特殊的對象,然后大家也了解函數(shù)聲明和函數(shù)表達(dá)式了。
//函數(shù)聲明 function show(){ console.log(12); } //函數(shù)表達(dá)式 var show = function(){ console.log(5); };
2.看到函數(shù)表達(dá)式也沒啥奇怪的,因為函數(shù)是對象,那把一個對象賦值給一個變量或者當(dāng)成參數(shù)傳遞都是可以的。
//函數(shù)表達(dá)式 var show = function(){ console.log(5); }; function Simple(show){ show(); } //或者更直接 function Simple(){ } simple(function(){});
函數(shù)能像數(shù)字一樣賦值給變量傳遞給參數(shù)的現(xiàn)象就叫做 first-class function,沒啥難的吧。
3.說到了對象我們就說下引用和復(fù)制的區(qū)別。var a = 12; var b = a; b+=5; alert(a);//12
這個沒啥好解釋的,b復(fù)制一份兒啊,b怎么改跟a無關(guān)。
var arr1 = [12,5,8]; var arr2 = arr1; arr2.pop(); alert(arr1);//12,5
我擦嘞,發(fā)生了什么?
記住一句話,基本類型的復(fù)制是直接拷貝一份兒跟原來的無關(guān),而對象復(fù)制僅僅是把地址指向復(fù)制了一份兒。
我有一個饅頭,基本類型復(fù)制就相當(dāng)于照著我的饅頭又給你做一個,吃了你的饅頭我手里的沒影響。
我有一把鑰匙,能開一個合租房的門,對象復(fù)制是引用,就是復(fù)制了一把鑰匙,你把廁所給拆了,我也嘚憋著。理解了不?
4.函數(shù)傳參這個我只是說一句,這個是很多開發(fā)者犯錯的地方,這里不解釋我一解釋你上下都不明白了只是告訴你就行。訪問變量有按值和按引用兩種方式,但是參數(shù)只能是按值傳遞。 參數(shù)類型是基本類型時,被傳遞的值被復(fù)制給一個局部變量,而復(fù)合類型復(fù)制的是地址。
好吧,直接上一個例子吧??梢月I(lǐng)悟吧。
function setName(obj){ obj.name = "尼古拉斯·屌·大彬哥" //重點(diǎn) obj = new Object(); obj.name = "帥彬" } var Person = new Object(); setName(Person); alert(Person.name);5.關(guān)于函數(shù)的this和arguments
js里面最惡心的東西,沒有之一。下面我說說this.這里我只說函數(shù)里面的this.
function show(){console.log(this);}//window var show = function{console.log(this);}//window
注意了,
var person = { name:"leo", show:function(){ this.name = "leolau"; console.log(this);//person對象 object } };
但是這里有個奇怪的事情,很多人認(rèn)為是bug,面試也經(jīng)???。
var person = { name:"leo", show:function(){ this.name = "leolau"; console.log(this);//person對象 object var bug = function(){ console.log(this);//window } bug(); } };
如何解決?
var person = { name:"leo", show:function(){ var that = this; this.name = "leolau"; console.log(this);//person對象 object var bug = function(){ console.log(that);//person } bug(); } };
至于arguments給大家一個實際應(yīng)用。未知參數(shù)個數(shù)不定求和。大家想想怎么做?
6.什么是匿名函數(shù)自執(zhí)行并如何在實際庫中應(yīng)用
匿名函數(shù)自執(zhí)行,注意,注意,只有這個名字和iife沒有其它名字,比如封閉空間,這個是為了讓大家好理解自己造的詞語。他的一個重要用途就是防止命名沖突,另外是組織和架構(gòu)庫,比如jquery.
命名沖突
a.js
var a = 12;
b.js
var a = 5;
同時引用a,b后面覆蓋前面了就。怎么防止命名沖突前后覆蓋。
var a = 12; (function(){ var a = 5; })();
這里iifes里面的a并不會干擾外面的a,那么問題來了,萬一我就想改外面的a,呢?
這也是很多jquery庫的做法,這么搞:
(function(global,$){ $.a = 12; global.a = 5; })(window,jquery);
既滿足了外面的修改,又做到了防止變量污染。閉包下節(jié)課再說困了。
下節(jié)課多帶帶說閉包,垃圾回收,回調(diào)函數(shù)和定時器。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/82600.html
摘要:注意匿名函數(shù)自執(zhí)行只是產(chǎn)生閉包的一種情況,閉包是現(xiàn)象或者情形,不實用匿名函數(shù)自執(zhí)行也有很多情況產(chǎn)生閉包,所以而且根本就是兩回事兒,不能混淆。小測驗,你能看出下面的程序用了閉包嗎閉包在中使用。閉包無處不在,直接看的例子。 通過文你將學(xué)到: 1.閉包是怎么回事兒? 2.閉包的原理和在jquery中的應(yīng)用 3.從一到面試題徹底理解閉包和垃圾回收機(jī)制 4.閉包在jquery中的應(yīng)用 概述 ...
摘要:大彬哥版權(quán)所有翻錄必究尼古拉斯屌大彬哥群尼古拉斯屌大彬哥函數(shù)聲明函數(shù)表達(dá)式是不是簡單的讓人發(fā)指區(qū)別就一句話,函數(shù)聲明,可以在函數(shù)調(diào)用之后,因為有函數(shù)預(yù)解析。而函數(shù)表達(dá)式必須在調(diào)用之前。 通過前三課講解,大家應(yīng)該能做到 1.手里有一份隨時能夠換工作自信的簡歷 2.知道了學(xué)習(xí)js的正確姿勢 3.理解了全局對象、全局上下文、知道有預(yù)解析同時做了至少50道面試題 4.能熟練的使用json構(gòu)建...
javascript -- 回調(diào)函數(shù) 在高級語言層出不窮的年代, 各個語言都號稱有著一切皆為對象的自豪說法, 而 js 作為一門腳本語言卻相對于java等傳統(tǒng)面向?qū)ο笳Z言有很大的不同之處, 除了 js 詭異的繼承體系之外, 最令人著迷的一個特性就是回調(diào)函數(shù), 當(dāng)然也有很多人對他詬病, 筆者認(rèn)為 回調(diào)函數(shù) 和 異步 是js語言特性的兩大最為突出的店, 當(dāng)然正如所有優(yōu)點(diǎn)需要滿足自我的需求, 這個世界...
摘要:那該如何是好原題給出思路是讓事件負(fù)責(zé)標(biāo)記按鍵就好了,而方向鍵的事件處理使用設(shè)個周期比較小的定時器持續(xù)監(jiān)聽,由于周期小,長按時就會立刻執(zhí)行相應(yīng)的事件處理,效果更加流暢。閃爍實現(xiàn)效果閃爍簡單的一個定時器應(yīng)用,用或都可以實現(xiàn)。 0x1模擬select控件 實現(xiàn)效果:5-01模擬select控件 比較簡單的點(diǎn)擊事件處理,也就處理點(diǎn)擊選擇框展示菜單、點(diǎn)擊菜單選擇、點(diǎn)擊頁面任意角落隱藏菜單這三件事...
閱讀 1319·2021-09-27 13:56
閱讀 2351·2019-08-26 10:35
閱讀 3511·2019-08-23 15:53
閱讀 1859·2019-08-23 14:42
閱讀 1243·2019-08-23 14:33
閱讀 3572·2019-08-23 12:36
閱讀 1955·2019-08-22 18:46
閱讀 1006·2019-08-22 14:06