亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript定義函數的方法有哪些

發布時間:2022-02-22 17:22:52 來源:億速云 閱讀:146 作者:iii 欄目:開發技術

這篇文章主要講解了“JavaScript定義函數的方法有哪些”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“JavaScript定義函數的方法有哪些”吧!

方法一:函數定義語句

我們現在來看下代碼:

//求和函數
function sum(a,b){
return a+b;
}

上面的這個代碼時我們比較典型的函數聲明,通過以function之后其后在跟隨函數的名稱標識符、小括號和中大括號。對于這種函數定義方式我們是需要顯示指定的函數名稱,我們在代碼執行中可以通過函數名稱來調用我們的函數,我們可以看看下面的例子:

console.log(sum); //控制臺輸出sum函數的源代碼,此時函數還未定義
function sum(a,b){
return a+b;
}
console.log(sum(2,3)); //5

既然上面介紹了有關于函數聲明之后,那對于函數的作用域就不得不說一下了,函數作用域是指在函數中聲明的所有變量的函數體始終可見,這就說明了我們的變量在聲明之前已經可以使用,通過這個特點我們可以稱它為聲明提前,下面我們來看一串代碼:

var scope = "global";
function f(){
console.log(scope); //輸出“undefined”,而不是“global”
var scope = "local"; //變量在這里賦初始值,但變量本身在函數體內任何地方均是有定義的
console.log(scope); //輸出“local”
}
f();
以上代碼等價于
var scope = "global";
function f() {
var scope; //在函數頂部聲明了局部變量,即聲明提前
console.log(scope); //變量存在,輸出“undefined”,而不是“global”
var scope = "local"; //變量在這里賦初始值
console.log(scope); //輸出“local”
}
f();

在代碼中我們在函數體內聲明所有變量,而且在聲明之前就已經有了定義,但是呢只有在執行這個變量時候才會被賦值。


方法二:函數直接量表達式

我們先來看看下面代碼:

//求階乘的函數
var factorial = function fact(x){ //將函數賦值給一個變量
if(x<0) {return NaN;}
else if(x===0) {return 1;}
else
return x*fact(x-1); //遞歸函數
};
console.log(factorial(3)); //6

在代碼中我們可以看出,它與函數定義語句是一樣的,通過使用我們的 function。然而一般這種方式的定義是使用于將它作為一個大的表達式的一部分的,就像是在賦值、調用和定義函數類似。那么這種方式的話是比較適合對于哪些在開發中只會被使用到一次的函數。如下所示:

var f=function(x){ //省略函數名的匿名函數
return x*x;
}


與函數定義語句不同的是,函數直接量表達式是在執行到代碼時才加載函數的,我們可以用下面的代碼來說明。

console.log(f); //控制臺輸出undefined,此時函數f還未加載
var f=function(x){ //開始加載函數
return x*x;
}
console.log(f); //控制臺輸出函數的源代碼

方法三:Function()構造函數

先看代碼:

var f = new Function("x","y","return x+y"); //Function()構造函數
var f = function(x,y){return x+y}; //這兩條代碼是等價的

通過這個方法我們可以傳入任意數量的字符串實參,而且最后一個實參所表示的文本是函數體,這個方法它是可以包含任意數量的JavaScript語句的,而且在使用的時候如果構造的函數不包含任何參數的話,我們只需要輸入一個函數就可以了。這個方法和其他兩個方法是不一樣的,這個方法是允許JavaScript在運行的時候動態地創建翻譯函數,而且我們每次在調用這個方法的時候函數都會進行解析函數體。所以在多次使用或者循環使用的話,效率是會受到影響的。相比之下循環中的嵌套函數和函數定義表達式就不會每次執行的時候進行重新編譯。

對于這個構造函數還有一點是值得我們注意的,那就是它所創建的函數并不是使用詞法作用域,都因為函數體代碼在編譯的時候總在頂層函數執行,代碼如下所示:

var a = 3; //在頂層函數中聲明變量a
function f(){
var a = 2; //在函數體內聲明局部變量a
return new Function("return a*a;"); //無法捕獲局部作用域
}
console.log(f()()); //控制臺輸出9而非4,說明構造函數的編譯在頂層函數執行

那么對于這個問題我們可以在全局作用域中進行執行eval()。

感謝各位的閱讀,以上就是“JavaScript定義函數的方法有哪些”的內容了,經過本文的學習后,相信大家對JavaScript定義函數的方法有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

邛崃市| 如皋市| 电白县| 阳高县| 临沭县| 永安市| 山东省| 如皋市| 安龙县| 洮南市| 会理县| 句容市| 石景山区| 青神县| 甘南县| 康乐县| 苏尼特左旗| 外汇| 章丘市| 武宣县| 涪陵区| 无极县| 泉州市| 无棣县| 陕西省| 乌恰县| 丰宁| 桃园市| 吉隆县| 武川县| 临汾市| 松原市| 天祝| 佛山市| 仁寿县| 虞城县| 蚌埠市| 交城县| 香河县| 通道| 松潘县|