成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

深入淺出JavaScript:定義函數(shù)(函數(shù)聲明&函數(shù)表達(dá)式)

mj / 2714人閱讀

摘要:函數(shù)聲明和函數(shù)表達(dá)式的區(qū)別雖然都可以定義函數(shù),但最大的區(qū)別在于解析器會(huì)率先讀取函數(shù)聲明,使其在執(zhí)行任何代碼之前就可以訪問(wèn)也就是函數(shù)聲明提升而函數(shù)表達(dá)式則需要解析器執(zhí)行到它所在的代碼行才會(huì)被解釋執(zhí)行。

定義函數(shù) 方法一:函數(shù)聲明

函數(shù)聲明要素:function關(guān)鍵字,functionName函數(shù)名,arg參數(shù)(可選)

語(yǔ)法

function functionName(arg){
    //函數(shù)體
}

示例

function square(number) {
  return number * number;
}

var a = 2;

square(a); //4

需要注意的地方:

當(dāng)函數(shù)的參數(shù)是一個(gè)值(比如上面的例子),
若被調(diào)用函數(shù)改變了這個(gè)參數(shù)的值,這樣的改變不會(huì)影響到全局或調(diào)用的函數(shù)。

但當(dāng)函數(shù)的參數(shù)是一個(gè)對(duì)象(即一個(gè)非原始值,例如Array或用戶自定義的其它對(duì)象),
若函數(shù)改變了這個(gè)對(duì)象的屬性,這樣的改變對(duì)函數(shù)外部是可見(jiàn)的。

function myFunc(theObject) {
  theObject.make = "Toyota";
}

var mycar = {make: "Honda", model: "Accord", year: 1998},
var x, y;

x = mycar.make;     // x 獲取的值為 "Honda"【原本】

myFunc(mycar);
y = mycar.make;     // y 獲取的值為 "Toyota"【現(xiàn)在】(make屬性的值在函數(shù)中被改變了)
方法二:函數(shù)表達(dá)式

函數(shù)表達(dá)式要素:var關(guān)鍵字,variableName變量名,表達(dá)式賦值等號(hào),聲明變量后的分號(hào),
functionName函數(shù)名(可選,沒(méi)有的話叫做匿名函數(shù))

語(yǔ)法

var variableName = function functionName(arg){
    //函數(shù)體
};

示例1(匿名函數(shù))

var square = function(number) {
  return number * number;
};
var x = square(4); // x 得到的值為16

示例2(函數(shù)表達(dá)式也可以提供函數(shù)名,并且可以用于在函數(shù)內(nèi)部使用來(lái)代指其本身,或者在調(diào)試器堆棧跟蹤中鑒別該函數(shù))

var factorial = function fac(n) {return n<2 ? 1 : n*fac(n-1)};

console.log(factorial(3));
var x = square(4); // x 得到的值為16

需要注意的地方:
使用Function構(gòu)造函數(shù)也可以定義函數(shù),不過(guò)因?yàn)樾阅軉?wèn)題不推薦使用,在此僅作了解就好

語(yǔ)法

    var variableName = new Function("arg0","arg1","函數(shù)體");
    //函數(shù)是對(duì)象,函數(shù)名是指針,一個(gè)函數(shù)可能會(huì)有多個(gè)名字~~
    //當(dāng)一個(gè)對(duì)象的屬性是函數(shù)時(shí),其稱(chēng)之為方法。

函數(shù)聲明和函數(shù)表達(dá)式的區(qū)別

雖然都可以定義函數(shù),但最大的區(qū)別在于:
解析器會(huì)率先讀取函數(shù)聲明,使其在執(zhí)行任何代碼之前就可以訪問(wèn)(也就是 函數(shù)聲明提升);
而函數(shù)表達(dá)式則需要解析器執(zhí)行到它所在的代碼行才會(huì)被解釋執(zhí)行。

sayHi();//能正常運(yùn)行 彈Hi
sayHi123();//報(bào)錯(cuò) Uncaught TypeError: sayHi123 is not a function(…)

function sayHi(){
    alert("Hi");
}

var sayHi123 = function sayHi(){
    alert("Hi123");
};

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/79359.html

相關(guān)文章

  • es6必會(huì)之let &amp;&amp; const

    摘要:副作用,無(wú)副作用可執(zhí)行和關(guān)鍵詞。和不能像一樣同一個(gè)下聲明多次和不會(huì)像一樣變量聲明提升原因是,存在因此不能,賦值前使用變量。 showImg(https://segmentfault.com/img/bVbhPlD?w=1271&h=715); 關(guān)鍵詞: let ,const, blocking scope ,temporal dead zone,redeclaration,reassi...

    ygyooo 評(píng)論0 收藏0
  • ECMA_作用域深入&amp;This關(guān)鍵字

    摘要:預(yù)解析聲明告知瀏覽器在全局作用域中有一個(gè)變量名為的變量。執(zhí)行代碼的就是棧內(nèi)存,作用域也是棧內(nèi)存。關(guān)鍵字在中主要研究都是函數(shù)中的中的代表的是當(dāng)前行為執(zhí)行的主體方法,函數(shù),事件中的上下文代表的是當(dāng)前行為執(zhí)行的環(huán)境區(qū)域例如小明在沙縣小吃吃蛋炒飯。 基本認(rèn)識(shí) 數(shù)據(jù)類(lèi)型 基本數(shù)據(jù)類(lèi)型 string, number, null, boolean, undefined 引用數(shù)據(jù)類(lèi)型 object: ...

    Harriet666 評(píng)論0 收藏0
  • javascript 聲明前置與作用域 ( hoisting&amp; Scoping)

    摘要:特別注意的是不用聲明的變量那么他歸所有也就是全局作用域所有。如果到達(dá)全局作用域但是這個(gè)變量仍未找到,則會(huì)拋出異常。語(yǔ)句結(jié)束后,作用域鏈恢復(fù)正常。 1.javascript不管是變量(or 叫變量表達(dá)式?或者變量的聲明與賦值吧 var scope=loacal)的聲明還是函數(shù)(or 函數(shù)表達(dá)式)的聲明,都遵循命名在當(dāng)前作用域前置(提升到當(dāng)前命名空間頂端)函數(shù)體保留在原地。 var sco...

    mmy123456 評(píng)論0 收藏0
  • 溫故js系列(14)-閉包&amp;垃圾回收&amp;內(nèi)存泄露&amp;閉包應(yīng)用&amp;作用域鏈&

    摘要:該對(duì)象包含了函數(shù)的所有局部變量命名參數(shù)參數(shù)集合以及,然后此對(duì)象會(huì)被推入作用域鏈的前端。如果整個(gè)作用域鏈上都無(wú)法找到,則返回。此時(shí)的作用域鏈包含了兩個(gè)對(duì)象的活動(dòng)對(duì)象和對(duì)象。 前端學(xué)習(xí):教程&開(kāi)發(fā)模塊化/規(guī)范化/工程化/優(yōu)化&工具/調(diào)試&值得關(guān)注的博客/Git&面試-前端資源匯總 歡迎提issues斧正:閉包 JavaScript-閉包 閉包(closure)是一個(gè)讓人又愛(ài)又恨的somet...

    Amio 評(píng)論0 收藏0
  • JavaScript &amp; 6小時(shí)了解ES6基本語(yǔ)法

    摘要:返回布爾值,表示參數(shù)字符串是否在源字符串的頭部。參考語(yǔ)法返回一個(gè)布爾值與的全等操作符比較兼容環(huán)境把對(duì)象的值復(fù)制到另一個(gè)對(duì)象里淺拷貝定義方法用于將所有可枚舉的屬性的值從一個(gè)或多個(gè)源對(duì)象復(fù)制到目標(biāo)對(duì)象。語(yǔ)法要設(shè)置其原型的對(duì)象。 一步一步似爪牙。 前言 學(xué)習(xí)es6之前我們可能并不知道es6相比es5差距在哪, 但是這并不妨礙我們站在巨人的肩膀上; 程序員就是要樂(lè)于嘗鮮; 學(xué)習(xí)es6最終目的是...

    Amos 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

mj

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<