一、函式
數的定義有兩種:一為函式的宣告、二為函式運算式-匿名函式函式宣告
1 function fn(){//需要函式名 2 console.log("函式宣告"); 3 } 4 fn()

函式運算式
1 const fs=function(){//需要定義變數接收 2 console.log("函式運算式"); 3 } 4 console.log(fs);

函式自呼叫
自呼叫的函式一般是匿名函式 也就是說自呼叫時是函式的運算式
錯誤的寫法
錯誤一

原因是js決議時,遇到function關鍵字被默認當成函式宣告,而不是一個函式運算式,讓后面的"();"變得孤立,從而產生語法錯誤,函式宣告需要一個函式名,上面代碼中函式沒有函式名,要解決的就是讓function () {console.log(111);}是一個函式運算式,而不是函式宣告陳述句,
(function{//.......}) 是運算式----加個括號 function{//.......}
當js執行到(function {// code})();時, 由于(function {// code})是運算式, js會去對它求解得到回傳值, 由于回傳值是一 個函式, 故而遇到();時, 便會被執行,也可以表示為如下形式
var i = function(){ return 10; }();
正確的寫法
一、最前面和最后加個小括號
1 // 沒有引數的情況 2 (function () { 3 console.log(111); 4 }()); 5 6 // 有引數的情況 7 (function (形參1, 形參2) { 8 // 函式體 9 }(實參1, 實參2));

二、function外面加括號
1 //沒有引數的情況 2 (function () { 3 console.log(222); 4 })(); 5 6 //有引數的情況 7 (function (形參1, 形參2) { 8 //函式體 9 })(實參1, 實參2);

三、最前面和最后面加上中括號
1 //沒有引數的情況 2 [function () { 3 console.log(333); 4 }()]; 5 6 //有引數的情況 7 [function (形參1, 形參2) { 8 //函式體 9 }(實參1, 實參2)];

四、function前面加運算子,常用!、-、+
1 //沒有引數的情況 2 !function () { 3 console.log(444); 4 }(); 5 6 //有引數的情況 7 !function (形參1, 形參2) { 8 //函式體 9 }(實參1, 實參2);

五、function前面加void
1 //沒有引數的情況 2 void function () { 3 console.log(555); 4 }(); 5 6 //有引數的情況 7 void function (形參1, 形參2) { 8 //函式體 9 }(實參1, 實參2);
閉包
大函式里裝著小函式 第一次呼叫大函式:回傳小函式 第二次呼叫:執行回傳的小函式的內部代碼
變數的作用域分全域變數和區域變數,區域變數僅在函式內部使用
閉包的核心就是內部函式可以參考外部函式的引數和變數,通過回傳函式來擴大函式的作用域

閉包傳遞引數
定義函式如下,定義obj變數時,傳入引數,當obj()呼叫時,輸出傳入的引數
1 function fun(x) {//函式宣告方式 2 return function() { 3 console.log(x); 4 } 5 } 6 var obj = fun(4); 7 // 相當于 obj = function() {console.log(4)} 8 obj(); //執行 console.log(4)

都是兩次呼叫 呼叫(回傳出內部函式)-賦值-呼叫(回傳出的函式)
事件閉包
倘若我們需要為每一個li添加click事件,點擊li出現對應的序號

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/523134.html
標籤:其他
上一篇:1.1 仿百度Web Day1
