經常關注大廠面試題分享的會發現,大廠非常注重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 ...