javascript忍者秘籍 函式是根基

2021-09-24 07:29:13 字數 2028 閱讀 7783

經常關注大廠面試題分享的會發現,大廠非常注重js基礎,苦於啃五花八門的js框架而煩惱的你不如補一補你的js基礎(求放過~這裡沒有貶低學js框架的意思)這編文章是整理js忍者秘籍重要的知識點和加上本人的理解,看了會讓你對js的了解進乙個階層!憋懷疑,本人就是乙個栗子。(微笑臉)

函式是第一型物件,因為函式可以像物件通過字面量進行建立,賦值變數、陣列,作為函式的返回值,擁有動態建立並返回賦值的屬性。函式最重要的特性是它可以被呼叫,而通常都是以非同步的方式進行呼叫,其原理是瀏覽器事件輪詢是單執行緒的,即每個事件都是按照在佇列放放置的順序類執行的,就是fifo(先進先出)列表,在任何情況下單執行緒不可能同時執行兩個程式,所以必須等待當前事件結束之後才能執行另外乙個事件,就是說事件執行的時間不可知所以事件處理函式呼叫非同步。

函式是使用字面量進行宣告從而建立函式值的,函式字面量由四個部分組成

2.可選名稱

3.括號內部,乙個以逗號分隔開的引數列表

4.函式體

複製**

我知道你想問什麼,沒錯!函式名是可選的,它只是函式的引用,匿名函式就是乙個栗子。可以通過訪問函式的name屬性獲取函式名

function

ninja

(){}

ninja.name //ninja

複製**

另外值得注意的是書上說建立乙個匿名函式並賦值給乙個變數,這個變數並不是該函式的name,但是本人發現在支援es6語法的chrome下獲取函式name不是空而是匿名函式賦值給該變數的變數名。

var fn = function

() {};

// es5

fn.name // ""

// es6

fn.name // "fn"

複製**

也可以通過屬性訪問的方式獲取形參長度,注意是形參不是實參,形參和實參的區別是:形參是函式宣告時定義的引數,而實參是函式呼叫時傳給函式的引數。下面會講怎麼獲取實參。

var fn = function (a,b) {};

fn.length // 2

複製**

函式被呼叫的時候到底發生了什麼?事實上函式被呼叫的方式對其函式內部**執行有著巨大的影響。有四種不同的方式進行函式呼叫,每個方式都有細微的差別。

有趣的是在函式呼叫的時候都會傳遞兩個隱式引數:arguments和this,所謂隱式就是這些引數不會顯示在函式簽名裡,但是它們會傳遞給函式並在函式作用域內,在函式內可以進行訪問和使用。

arguments是函式呼叫時傳給函式的實際引數集合,可以用length屬性獲取集合的長度,但是arguments並不是真正的陣列。

function fn (a,b,c) 

fn.length // 3

fn(6,6,) // 2

複製**

function

ninja

()ninja() //window

複製**

當函式作為「方法呼叫」,是指當函式被賦值給物件的乙個屬性,並使用引用該函式的這個屬性進行呼叫,this指向該物件,例項如下:

var o={};

o.ninja=function

();o.ninja(); // o

複製**

當函式作為「構造器」進行呼叫時:

function

ninja()}

var ninja1=new ninja();

var ninja1=new ninja();

ninja1.shulk() //ninja1

ninja2.shulk() //ninja2

複製**

function

juggle()}

var arr=['tom','alice','jack'];

foreach(arr,function(e,i)) //tom,alice,jack

複製**

JavaScript忍者秘籍筆記05之跨瀏覽器策略

form action conceal type text id action type submit id submit form document.getelementbyid form submit typeerror document.getelementbyid submit is not...

忍者秘籍 第三章學習筆記

瀏覽器的事件輪詢 在觸發乙個事件的時候,它會先進入乙個事件佇列 fifo 然後瀏覽器將呼叫為這些程式建立好的處理程式。函式宣告 乙個函式的宣告分為函式宣告與函式表示式,不管是哪一種只要是有函式名的就會在window.name屬性上新增相應的名字 如果是匿名函式也會有window.name屬性,只不過...

javascript複習筆記二 自動轉型函式

要將乙個值轉換為其對應的boolean 值,可以呼叫轉型函式boolean 如下例所示 var message hello world var messageb boolean message 資料型別 轉換為true 的值 轉換為false的值 boolean true false string ...