javascript
《javascript高级程序设计》笔记:Function类型
這么長時間沒有寫博客,就是因為函數這部分比較麻煩,自己一直想抽出大把的時間來研究這個,可是結果卻是一拖再拖,這樣不好。有時間就寫才是王道啊,不然這計劃得一直卡在這里了..
1. 幾個概念
函數:將代碼進行封裝, 復用的邏輯單元(代碼)
對象:無序鍵值對的集合
數組:有序鍵值對的集合, 數組的索引號就是鍵
屬性:對象屬性的值是一個普通的數據
方法:對象的屬性是一個函數
對象的成員:包括屬性和方法
另外關于函數,你應該時刻記住的是:函數也是對象,函數名是一個指向函數對象的指針。因此,函數也可以作為參數傳遞
2. 函數的三種創建方式
2.1 函數表達式
標準語法:
var fn = function(){}; // 只能在聲明之后調用有一種寫法也需要注意,可能在面試題中會遇到:
var fn = function fn1(){}; // 不會報錯有這樣一個例子,能夠很好的區分兩種寫法的差異
// 標準寫法 var fn = function(){console.log(fn); // function (){ console.log(fn) } }; fn(); console.log(fn); // function (){ console.log(fn) }// 非主流寫法 var fn1 = function fn2() {console.log(fn1);console.log(fn2); } fn1(); console.log(fn1); console.log(fn2);為了更有說服力,我直接上圖吧!
結論:
函數表達式聲明方式中,function后面也可以添加函數名,但僅能在函數內部使用
2.2 函數聲明
語法:
function fn(){}; // 能夠在作用域下的任何地方使用2.3 構造函數聲明
語法:
var fn = new Function(param1, param2, body)Function構造函數可以接受任意數量的參數,但最后一個參數始終被看做函數體,相當于一個小型的js編譯器(執行效率低)
var fn = new Function(num1, num2, “return num1+num2”); // 等價于 function fn(num1, num2) {return num1 + num2; } // 或 var fn = function(num1, num2) {return num1 + num2; }2.3 函數聲明和函數表達式的區別
1 函數聲明會把整個函數體提升到最前面function fn() {},因此調用的位置沒有先后之分;函數表達式只會把函數名字提升var fn = function() {}; 此時函數作為數據,因此必須先聲明后使用
2 函數聲明不能夠出現在其他語句塊中!函數聲明能夠出現的位置: 全局環境中其他函數內部
個人建議:從代碼可維護性出發,盡量使用函數表達式的方式來聲明函數
3. 函數內部屬性
1.name屬性
函數名.name => 獲取字符串類型的函數名稱
// 外部 function fn1(){}; console.log(fn1.name); // fn1 // 內部 function fn2() {console.log(fn2.name); // fn2 } fn2();2.length屬性
函數名.length => 獲取形參的個數,未傳參時返回0
// 外部 function fn1(a,b){}; console.log(fn1.length); // 2 // 內部 function fn2(a,b,c) {console.log(fn2.length); // 3 } fn2();3.caller屬性
函數名.caller => 獲得調用函數的函數引用(函數在哪被調用),如果在全局中調用當前函數,值為null
var inner = function() {alert(inner.caller); }; var outer = function() {inner(); }; outer(); // function() { inner(); }; inner(); // null4.arguments屬性
arguments只能在函數內部使用,用來獲取傳入的實參。是一個偽數組
其內部有如下屬性:
arguments.length:獲取實參的個數
arguments.callee:獲取當前函數的引用,一般用在匿名函數遞歸中
5.this屬性
this會在下一篇博客中詳細講解,先記住一句話:
this的指向和函數執行的環境相關,與它聲明的環境無關
4.函數的形參和實參
形參:函數聲明時的參數,起占位作用——函數名.length(形參個數)
實參:函數調用時的參數,實際參與運算的值—arguments.length(實參個數)
當形參個數大于實參時,多余的形參將設置成undefined
當實參個數大于形參時,無法直接獲得所有的實參,通過arguments獲得實參
參數傳遞的理解:形參相當于一個具有局部作用域不需要聲明的和實參指向相同堆地址對象的值,其類型與實參相同
總結
以上是生活随笔為你收集整理的《javascript高级程序设计》笔记:Function类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Cisco WLC 配置 NPS服务器
- 下一篇: SpringCloud(第 017 篇)