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