JS函數(shù)--Function

<strong>一.通過關鍵字 function 定義</strong>
1.函數(shù)可以通過聲明定義,也可以是一個表達式。
1)聲明:
function functionName(parameters) {
執(zhí)行的代碼
}
注意:
a.由于函數(shù)聲明不是一個可執(zhí)行語句,所以不以分號結束。
2)表達式:
函數(shù)表達式可以存儲在變量中:
var x = function (a, b) {return a * b};
在函數(shù)表達式存儲在變量后,變量也可作為一個函數(shù)使用:
var z = x(4, 3);
注意:
a.以上函數(shù)實際上是一個 匿名函數(shù) (函數(shù)沒有名稱)。
b.函數(shù)存儲在變量中,不需要函數(shù)名稱,通常通過變量名來調用。
c.上述函數(shù)以分號結尾,因為它是一個執(zhí)行語句。

<strong>二.通過內置的 JavaScript 函數(shù)構造器(Function())定義</strong>
var myFunction = new Function("a", "b", "return a * b");
var x = myFunction(4, 3);
等價于:
var myFunction = function (a, b) {return a * b}
var x = myFunction(4, 3);
注意:
在 JavaScript 中,很多時候,你需要避免使用 new 關鍵字。

<strong>三.函數(shù)提升(Hoisting)</strong>
提升(Hoisting)應用在變量的聲明與函數(shù)的聲明。使變量和函數(shù)可以在聲明之前調用。
注意:
聲明方式的函數(shù)可以提升,使用表達式定義函數(shù)時無法提升。

<strong>四.自調用函數(shù)</strong>
(function () {
var x = "Hello!!";
})();
或:
(function(){
var x = "World!!";
}());
注意:
a.想避免因少寫一個分號而拋出TypeError: undefined is not a function異常,那么就像下面的那樣寫吧!
;(function(){
console.log('HI');
}());
b.以上函數(shù)實際上是一個 匿名自我調用的函數(shù) (沒有函數(shù)名)。
c首先要牢記一條規(guī)則:括號會馬上執(zhí)行其前面的表達式。
var i=function (a,b){
return a+b;
}(1,2);
alert(i);

<strong>五.函數(shù)是對象</strong>
1.在JavaScript解釋執(zhí)行的時候,實際上每個函數(shù)都是被維護為一個對象,即函數(shù)對象(Function Object)。

2.函數(shù)對象與其它用戶所定義的對象有著本質的區(qū)別,這一類對象被稱之為內部對象,例如日期對象(Date)、數(shù)組對象(Array)、字符串對象(String)都是屬于內部對象。換句話說,這些內置對象的構造器是由JavaScript本身所定義的:通過執(zhí)行new Array()這樣的語句返回一個對象,JavaScript 內部有一套機制來初始化返回的對象,而不是由用戶來指定對象的構造方式。

3.在 JavaScript中,函數(shù)對象對應的類型是Function,正如數(shù)組對象對應的類型是Array,日期對象對應的類型是Date一樣,可以通過new Function()來創(chuàng)建一個函數(shù)對象,也可以通過function關鍵字來創(chuàng)建一個對象。

4.為了便于理解,將函數(shù)對象的創(chuàng)建和數(shù)組對象的創(chuàng)建來比較。先看數(shù)組對象:下面兩行代碼的作用是一樣的,都是創(chuàng)建一個數(shù)組對象:
var myArray=[];
等價于
var myArray=new Array();
同樣,下面的兩段代碼也是等價的,都是創(chuàng)建一個函數(shù):
function myFunction(a,b){
return a+b;
}
等價于
var myFunction=new Function("a","b","return a+b");

<strong>六.函數(shù)參數(shù)</strong>
1.顯示參數(shù)Parameters
函數(shù)顯式參數(shù)在函數(shù)定義時列出。
functionName(parameter1, parameter2, parameter3) {
// 要執(zhí)行的代碼……
}
2.隱式參數(shù)Arguments
函數(shù)隱式參數(shù)在函數(shù)調用時傳遞給函數(shù)真正的值。
function funTest(a,b){
for(var i in argument){
console.log(argument[i]);
}
}
funTest(1,2,3,'4','5',true,6);//前兩個是顯示參數(shù),其他都是隱式參數(shù)
3.理解說明:
javascript函數(shù)的參數(shù)與大多數(shù)其他語言的函數(shù)的參數(shù)有所不同。函數(shù)不介意傳遞進來多少個參數(shù),也不在乎傳進來的參數(shù)是什么數(shù)據(jù)類型,甚至可以不傳參數(shù)。

<strong>七.函數(shù)調用</strong>
1.函數(shù)作為一個函數(shù)調用
function myFunction(a, b) {
return a * b;
}
myFunction(10, 2); // 直接調用函數(shù),返回20;
注意:
a.在瀏覽器中的頁面對象是瀏覽器窗口(window 對象)。以上函數(shù)會自動變?yōu)?window 對象的函數(shù)。myFunction() 和 window.myFunction() 是一樣的:
function myFunction(a, b) {
return a * b;
}
window.myFunction(10, 2);//這是調用 JavaScript 函數(shù)常用的方法, 但不是良好的編程習慣,全局變量,方法或函數(shù)容易造成命名沖突的bug。
b.函數(shù)作為全局對象調用,會使 this 的值成為全局對象。使用 window 對象作為一個變量容易造成程序崩潰。
function myFunction() {
return this;
}
myFunction(); //f返回是"[object Window]"

2.函數(shù)作為一個方法調用
在 JavaScript 中你可以將函數(shù)定義為對象的方法。
以下實例創(chuàng)建了一個對象 (myObject), 對象有兩個屬性 (firstName 和 lastName), 及一個方法 (fullName):
var myObject = {
firstName:"W",
lastName: "ZL",
fullName: function () {
return this.firstName + " " + this.lastName;
},
other: function(){
return this;
}
}
myObject.fullName(); // 返回"WZL"
myObject.other(); // 返回"[object Object]"
注意:
a.fullName 方法是一個函數(shù)。函數(shù)屬于對象。
b.this對象,擁有 JavaScript 代碼。實例中 this 的值為 myObject 對象。
3.使用構造函數(shù)調用函數(shù) // 略掉
4.使用函數(shù)方法調用函數(shù)
在 JavaScript 中, 函數(shù)是對象。JavaScript 函數(shù)有它的屬性和方法。
call() 和 apply() 是預定義的函數(shù)方法。 兩個方法可用于調用函數(shù),兩個方法的第一個參數(shù)必須是對象本身。
實例:
var myObject;
var myArray = [10,2];
function myFunction(a, b) {
return a * b;
}
myObject = myFunction.call(myObject, 10, 2);
myObject = myFunction.apply(myObject, myArray);

<strong>八.函數(shù)閉包</strong>
1.JavaScript 變量可以是局部變量或全局變量。私有變量可以用到閉包。
2.在web頁面中全局變量屬于 window 對象。
3.變量聲明時如果不使用 var 關鍵字,那么它就是一個全局變量,即便它在函數(shù)內定義。
4.內嵌函數(shù)
5.函數(shù)閉包
var add = (function () {
var counter = 0;
return function() {return counter += 1;}
})();

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 工廠模式類似于現(xiàn)實生活中的工廠可以產生大量相似的商品,去做同樣的事情,實現(xiàn)同樣的效果;這時候需要使用工廠模式。簡單...
    舟漁行舟閱讀 8,140評論 2 17
  • 原文: https://github.com/ecomfe/spec/blob/master/javascript...
    zock閱讀 3,491評論 2 36
  • 《ijs》速成開發(fā)手冊3.0 官方用戶交流:iApp開發(fā)交流(1) 239547050iApp開發(fā)交流(2) 10...
    葉染柒丶閱讀 5,664評論 0 7
  • js函數(shù)對象 轉載文章 函數(shù)是進行模塊化程序設計的基礎,編寫復雜的Ajax應用程序,必須對函數(shù)有更深入的了解。 J...
    猩崽大叔閱讀 1,030評論 0 0
  • 開業(yè)第四天,中餐廳迎來了薇姐、曉明哥和周冬雨的老師崔新琴——北京電影學院教授。 崔老師一來就干起了活,首先亮相的便...
    丫頭yuer閱讀 898評論 3 2

友情鏈接更多精彩內容