摘要:函數(shù)聲明和函數(shù)表達(dá)式的區(qū)別雖然都可以定義函數(shù),但最大的區(qū)別在于解析器會(huì)率先讀取函數(shù)聲明,使其在執(zhí)行任何代碼之前就可以訪問也就是函數(shù)聲明提升而函數(shù)表達(dá)式則需要解析器執(zhí)行到它所在的代碼行才會(huì)被解釋執(zhí)行。
定義函數(shù) 方法一:函數(shù)聲明
函數(shù)聲明要素:function關(guān)鍵字,functionName函數(shù)名,arg參數(shù)(可選)
語法
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è)對象(即一個(gè)非原始值,例如Array或用戶自定義的其它對象),
若函數(shù)改變了這個(gè)對象的屬性,這樣的改變對函數(shù)外部是可見的。
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á)式賦值等號,聲明變量后的分號,
functionName函數(shù)名(可選,沒有的話叫做匿名函數(shù))
語法
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)部使用來代指其本身,或者在調(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ù),不過因?yàn)樾阅軉栴}不推薦使用,在此僅作了解就好
語法
var variableName = new Function("arg0","arg1","函數(shù)體"); //函數(shù)是對象,函數(shù)名是指針,一個(gè)函數(shù)可能會(huì)有多個(gè)名字~~ //當(dāng)一個(gè)對象的屬性是函數(shù)時(shí),其稱之為方法。函數(shù)聲明和函數(shù)表達(dá)式的區(qū)別
雖然都可以定義函數(shù),但最大的區(qū)別在于:
解析器會(huì)率先讀取函數(shù)聲明,使其在執(zhí)行任何代碼之前就可以訪問(也就是 函數(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)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/79359.html
摘要:副作用,無副作用可執(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ù)據(jù)類型 基本數(shù)據(jù)類型 string, number, null, boolean, undefined 引用數(shù)據(jù)類型 object: ...
摘要:特別注意的是不用聲明的變量那么他歸所有也就是全局作用域所有。如果到達(dá)全局作用域但是這個(gè)變量仍未找到,則會(huì)拋出異常。語句結(jié)束后,作用域鏈恢復(fù)正常。 1.javascript不管是變量(or 叫變量表達(dá)式?或者變量的聲明與賦值吧 var scope=loacal)的聲明還是函數(shù)(or 函數(shù)表達(dá)式)的聲明,都遵循命名在當(dāng)前作用域前置(提升到當(dāng)前命名空間頂端)函數(shù)體保留在原地。 var sco...
摘要:該對象包含了函數(shù)的所有局部變量命名參數(shù)參數(shù)集合以及,然后此對象會(huì)被推入作用域鏈的前端。如果整個(gè)作用域鏈上都無法找到,則返回。此時(shí)的作用域鏈包含了兩個(gè)對象的活動(dòng)對象和對象。 前端學(xué)習(xí):教程&開發(fā)模塊化/規(guī)范化/工程化/優(yōu)化&工具/調(diào)試&值得關(guān)注的博客/Git&面試-前端資源匯總 歡迎提issues斧正:閉包 JavaScript-閉包 閉包(closure)是一個(gè)讓人又愛又恨的somet...
摘要:返回布爾值,表示參數(shù)字符串是否在源字符串的頭部。參考語法返回一個(gè)布爾值與的全等操作符比較兼容環(huán)境把對象的值復(fù)制到另一個(gè)對象里淺拷貝定義方法用于將所有可枚舉的屬性的值從一個(gè)或多個(gè)源對象復(fù)制到目標(biāo)對象。語法要設(shè)置其原型的對象。 一步一步似爪牙。 前言 學(xué)習(xí)es6之前我們可能并不知道es6相比es5差距在哪, 但是這并不妨礙我們站在巨人的肩膀上; 程序員就是要樂于嘗鮮; 學(xué)習(xí)es6最終目的是...
閱讀 3387·2021-09-30 09:47
閱讀 2404·2021-09-10 10:51
閱讀 2006·2021-09-08 09:36
閱讀 2998·2019-08-30 12:56
閱讀 3124·2019-08-30 11:16
閱讀 2690·2019-08-29 16:40
閱讀 3053·2019-08-29 15:25
閱讀 1691·2019-08-29 11:02