摘要:函數聲明和函數表達式的區別雖然都可以定義函數,但最大的區別在于解析器會率先讀取函數聲明,使其在執行任何代碼之前就可以訪問也就是函數聲明提升而函數表達式則需要解析器執行到它所在的代碼行才會被解釋執行。
定義函數 方法一:函數聲明
函數聲明要素:function關鍵字,functionName函數名,arg參數(可選)
語法
function functionName(arg){ //函數體 }
示例
function square(number) { return number * number; } var a = 2; square(a); //4
需要注意的地方:
當函數的參數是一個值(比如上面的例子),
若被調用函數改變了這個參數的值,這樣的改變不會影響到全局或調用的函數。
但當函數的參數是一個對象(即一個非原始值,例如Array或用戶自定義的其它對象),
若函數改變了這個對象的屬性,這樣的改變對函數外部是可見的。
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"【現在】(make屬性的值在函數中被改變了)方法二:函數表達式
函數表達式要素:var關鍵字,variableName變量名,表達式賦值等號,聲明變量后的分號,
functionName函數名(可選,沒有的話叫做匿名函數)
語法
var variableName = function functionName(arg){ //函數體 };
示例1(匿名函數)
var square = function(number) { return number * number; }; var x = square(4); // x 得到的值為16
示例2(函數表達式也可以提供函數名,并且可以用于在函數內部使用來代指其本身,或者在調試器堆棧跟蹤中鑒別該函數)
var factorial = function fac(n) {return n<2 ? 1 : n*fac(n-1)}; console.log(factorial(3)); var x = square(4); // x 得到的值為16
需要注意的地方:
使用Function構造函數也可以定義函數,不過因為性能問題不推薦使用,在此僅作了解就好
語法
var variableName = new Function("arg0","arg1","函數體"); //函數是對象,函數名是指針,一個函數可能會有多個名字~~ //當一個對象的屬性是函數時,其稱之為方法。函數聲明和函數表達式的區別
雖然都可以定義函數,但最大的區別在于:
解析器會率先讀取函數聲明,使其在執行任何代碼之前就可以訪問(也就是 函數聲明提升);
而函數表達式則需要解析器執行到它所在的代碼行才會被解釋執行。
sayHi();//能正常運行 彈Hi sayHi123();//報錯 Uncaught TypeError: sayHi123 is not a function(…) function sayHi(){ alert("Hi"); } var sayHi123 = function sayHi(){ alert("Hi123"); };
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/79359.html
摘要:副作用,無副作用可執行和關鍵詞。和不能像一樣同一個下聲明多次和不會像一樣變量聲明提升原因是,存在因此不能,賦值前使用變量。 showImg(https://segmentfault.com/img/bVbhPlD?w=1271&h=715); 關鍵詞: let ,const, blocking scope ,temporal dead zone,redeclaration,reassi...
摘要:預解析聲明告知瀏覽器在全局作用域中有一個變量名為的變量。執行代碼的就是棧內存,作用域也是棧內存。關鍵字在中主要研究都是函數中的中的代表的是當前行為執行的主體方法,函數,事件中的上下文代表的是當前行為執行的環境區域例如小明在沙縣小吃吃蛋炒飯。 基本認識 數據類型 基本數據類型 string, number, null, boolean, undefined 引用數據類型 object: ...
摘要:特別注意的是不用聲明的變量那么他歸所有也就是全局作用域所有。如果到達全局作用域但是這個變量仍未找到,則會拋出異常。語句結束后,作用域鏈恢復正常。 1.javascript不管是變量(or 叫變量表達式?或者變量的聲明與賦值吧 var scope=loacal)的聲明還是函數(or 函數表達式)的聲明,都遵循命名在當前作用域前置(提升到當前命名空間頂端)函數體保留在原地。 var sco...
摘要:該對象包含了函數的所有局部變量命名參數參數集合以及,然后此對象會被推入作用域鏈的前端。如果整個作用域鏈上都無法找到,則返回。此時的作用域鏈包含了兩個對象的活動對象和對象。 前端學習:教程&開發模塊化/規范化/工程化/優化&工具/調試&值得關注的博客/Git&面試-前端資源匯總 歡迎提issues斧正:閉包 JavaScript-閉包 閉包(closure)是一個讓人又愛又恨的somet...
摘要:返回布爾值,表示參數字符串是否在源字符串的頭部。參考語法返回一個布爾值與的全等操作符比較兼容環境把對象的值復制到另一個對象里淺拷貝定義方法用于將所有可枚舉的屬性的值從一個或多個源對象復制到目標對象。語法要設置其原型的對象。 一步一步似爪牙。 前言 學習es6之前我們可能并不知道es6相比es5差距在哪, 但是這并不妨礙我們站在巨人的肩膀上; 程序員就是要樂于嘗鮮; 學習es6最終目的是...
閱讀 3274·2021-09-30 09:47
閱讀 2290·2021-09-10 10:51
閱讀 1889·2021-09-08 09:36
閱讀 2926·2019-08-30 12:56
閱讀 3027·2019-08-30 11:16
閱讀 2622·2019-08-29 16:40
閱讀 2994·2019-08-29 15:25
閱讀 1632·2019-08-29 11:02