日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JavaScript学习记录四

發(fā)布時間:2023/12/16 javascript 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaScript学习记录四 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

案例:斐波那契數(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ù)

<script> function sayHi(fn) {console.log("您好啊");fn();//fn此時應(yīng)該是一個函數(shù)}function suSay() {console.log("我猥瑣,我邪惡,我齷齪,小蘇說");}sayHi(suSay); </script>

函數(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)存

<script>function f(){var n=5;}console.info(n); //無法訪問到n變量,javaScript中只有在函數(shù)中有塊的概念</script>


??? *
??? * 全局作用域:全局變量的使用范圍
??? * 局部作用域:局部變量的使用范圍
??? *
??? * 塊級作用域:一對大括號就可以看成是一塊,在這塊區(qū)域中定義的變量,只能在這個區(qū)域中使用,但是在js中在這個塊級作用域中定義的變量,外面也能使用;

{var num=10;console.log(num);//10 } console.log(num);//10

??? * 說明:js沒有塊級作用域,只有函數(shù)除外
??? *
??? * 隱式全局變量:聲明的變量沒有var,就叫隱式全局變量

<script>function f(){n=5;}f();console.info(n);//5</script>


??? * 全局變量是不能被刪除的,隱式全局變量是可以被刪除的
??? * 定義變量使用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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。