javascript
JavaScript学习记录四
案例:斐波那契數(shù)列
<script>//求斐波那契數(shù)列,12---144//1 1 2 3 5 8 13 21 34 55 89 144function getFib(num) {var num1=1;var num2=1;var sum=0;for(var i=3;i<=num;i++){sum=num1+num2;num1=num2;num2=sum;}return sum;}console.log(getFib(12));</script>arguments的使用:定義一個函數(shù),如果不確定用戶是否傳入了參數(shù),或者說不知道用戶傳了幾個參數(shù)
function f1() {//arguments----->數(shù)組使用------偽數(shù)組---var sum=0;for(var i=0;i<arguments.length;i++){sum+=arguments[i];}return sum;}console.log(f1(10,20,30));命名函數(shù):函數(shù)如果有名字,就是命名函數(shù)
???? * 把一個函數(shù)給一個變量,此時形成了函數(shù)表達式
???? * 例子:
???? * var f1=function (){
???? *
???? * };
???? * 如果是函數(shù)表達式,那么此時前面的變量中存儲的就是一個函數(shù),而這個變量就相當于是一個函數(shù),就可以直接加小括號調(diào)用了
???? * f1();
???? *
???? * 注意:
???? * 函數(shù)表達式后面,賦值結(jié)束后,要加分號
匿名函數(shù):函數(shù)如果沒有名字,就是匿名函數(shù)
???? 函數(shù)的自調(diào)用,沒有名字,調(diào)用---聲明的同時,直接調(diào)用
??? //一次性的--------
??? //??? (function(){console.log("阿姆斯特朗回旋加速");})();? 自動調(diào)用并進行打印
??? //??? //函數(shù)表達式
??? //??? var f2 = function () {
??? //????? console.log("哈哈,真的好帥哦");
??? //??? };
??? //??? //匿名函數(shù)不能直接調(diào)用(這里指的是沒有進行var f2=這樣的操作)
??? //??? f2();
function 類型
<script>function f1() {console.log("我是函數(shù)");}//如何獲取某個變量的類型? typeofconsole.log(typeof f1);//函數(shù)是有數(shù)據(jù)類型,數(shù)據(jù)類型:是function 類型的</script>回調(diào)函數(shù)
??? //函數(shù)可以作為參數(shù)使用,如果一個函數(shù)作為參數(shù),那么我們說這個參數(shù)(函數(shù))可以叫回調(diào)函數(shù)
??? //只要是看到一個函數(shù)作為參數(shù)使用了,那就是回調(diào)函數(shù)
函數(shù)是可以作為返回值使用的
<script>//結(jié)論:函數(shù)是可以作為返回值使用的:function f1() {console.log("f1函數(shù)調(diào)用了");return function () {console.log("這是一個函數(shù)");};}var ff=f1();//調(diào)用//ff就是一個函數(shù)了ff();</script>作用域:使用范圍
??? * 全局變量:聲明的變量是使用var聲明的,那么這個變量就是全局變量,全局變量可以在頁面的任何位置使用
??? * 除了函數(shù)以外,其他的任何位置定義的變量都是全局變量
??? * 局部變量:在函數(shù)內(nèi)部定義的變量,是局部變量,外面不能使用,局部變量使用匿名全局變量修飾(num=10),函數(shù)調(diào)用后外部可以進行訪問,下邊第二個代碼段說明該點。
??? * 全局變量,如果頁面不關(guān)閉,那么就不會釋放,就會占空間,消耗內(nèi)存
??? *
??? * 全局作用域:全局變量的使用范圍
??? * 局部作用域:局部變量的使用范圍
??? *
??? * 塊級作用域:一對大括號就可以看成是一塊,在這塊區(qū)域中定義的變量,只能在這個區(qū)域中使用,但是在js中在這個塊級作用域中定義的變量,外面也能使用;
??? * 說明:js沒有塊級作用域,只有函數(shù)除外
??? *
??? * 隱式全局變量:聲明的變量沒有var,就叫隱式全局變量
??? * 全局變量是不能被刪除的,隱式全局變量是可以被刪除的
??? * 定義變量使用var是不會被刪除的,沒有var是可以刪除的
作用域鏈:想鏈條一樣連接,被包含函數(shù)中無法調(diào)用包含函數(shù)中定義的變量
<script>var num=10;function f1() {var num=20;function f2() {console.info(num);//undefinedvar num=30;function f3() {var num=50;console.log(num);//50}f3();}f2();}f1();</script>預(yù)解析
??? * 把變量的聲明提前了----提前到當前所在的作用域的最上面
??? * 函數(shù)的聲明也會被提前---提前到當前所在的作用域的最上面
? 注意:
??? //預(yù)解析中,變量的提升,只會在當前的作用域中提升,提前到當前的作用域的最上面
??? //函數(shù)中的變量只會提前到函數(shù)的作用域中的最前面,不會出去
??? //預(yù)解析會分段(多對的script標簽中函數(shù)重名,預(yù)解析的時候不會沖突),一個script中允許出現(xiàn)同名函數(shù),但是預(yù)解析會存在覆蓋,最好避免同名函數(shù)的使用。
??? //與java語言不同,函數(shù)的調(diào)用只根據(jù)函數(shù)名來進行區(qū)分,與參數(shù)無關(guān),同名參數(shù)存在覆蓋
??? //匿名函數(shù)不存在預(yù)解析,必須聲明然后再進行調(diào)用,否則會直接報錯。
<script>console.log(num);//①沒有聲明,直接報錯的//分割線-----------------------------------console.log(num);//②顯示undefined,因為預(yù)解析,將變量的聲明提升,但是未進行賦值即:var num;var num=10;//分割線-----------------------------------f1();//函數(shù)調(diào)用的時候,把會函數(shù)的聲明提升到作用域的上面function f1(){console.info("函數(shù)調(diào)用的時候,把會函數(shù)的聲明提升到作用域的上面");}//分割線-----------------------------------function f1() {console.log("小蘇好猥瑣");}f1();function f1() {console.log("小蘇沒有助教猥瑣");}f1();//執(zhí)行結(jié)果是輸出了兩次"小蘇沒有助教猥瑣":第一IC調(diào)用的使用預(yù)解析,將下邊的f1提前了,所以兩次調(diào)用都使用的第二個f1函數(shù)。//分割線-----------------------------------f1();//var num=20; 如果這里加一個聲明,輸出結(jié)果還是undefined,變量的使用還是有就近原則的,這里使用了為進過初始化的num.function f1(){console.info(num);//undefined:說明預(yù)解析提前了聲明但是未賦值var num=10;}//分割線-----------------------------------f1();var num=20; 輸出結(jié)果還是undefined,方法調(diào)用在聲明之前,預(yù)解析方法聲明提前,此時num還未初始化。function f1(){console.info(num);//undefined:預(yù)解析提前} </script>?
總結(jié)
以上是生活随笔為你收集整理的JavaScript学习记录四的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何使用gitee(码云)提交,拉取管理
- 下一篇: Could not read JSON: