摘要:函數(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
摘要:副作用,無(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...
摘要:預(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: ...
摘要:特別注意的是不用聲明的變量那么他歸所有也就是全局作用域所有。如果到達(dá)全局作用域但是這個(gè)變量仍未找到,則會(huì)拋出異常。語(yǔ)句結(jié)束后,作用域鏈恢復(fù)正常。 1.javascript不管是變量(or 叫變量表達(dá)式?或者變量的聲明與賦值吧 var scope=loacal)的聲明還是函數(shù)(or 函數(shù)表達(dá)式)的聲明,都遵循命名在當(dāng)前作用域前置(提升到當(dāng)前命名空間頂端)函數(shù)體保留在原地。 var sco...
摘要:該對(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...
摘要:返回布爾值,表示參數(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最終目的是...
閱讀 3307·2021-09-30 09:47
閱讀 2329·2021-09-10 10:51
閱讀 1936·2021-09-08 09:36
閱讀 2954·2019-08-30 12:56
閱讀 3067·2019-08-30 11:16
閱讀 2652·2019-08-29 16:40
閱讀 3020·2019-08-29 15:25
閱讀 1663·2019-08-29 11:02