🍅 作者:阿珊
🍅 作者簡介:95后前端小姐姐,藍橋簽約作者,歡迎點贊、收藏、評論
🍅 粉絲專屬福利:知識體系、面試題庫、技識訓助、簡歷模板,文末公眾號領取
🍅 包郵送書(每周1-2次):關注公眾號「資訊技術智庫」回復「送書」

本文重點
-
函式案例
-
函式作為引數使用
-
arguments
-
作用域:寫代碼要注意變數的在哪宣告和使用的問題
-
預決議:什么叫預決議, 什么東西發生了什么事
01 作用域:使用范圍
全域變數:
-
宣告的變數是使用var宣告的,那么這個變數就是全域變數,
-
全域變數可以在頁面的任何位置使用
-
除了函式以外,其他的任何位置定義的變數都是全域變數
-
如果頁面不關閉,那么就不會釋放,就會占空間,消耗記憶體
-
全域作用域:全域變數的使用范圍
區域變數:
-
在函式內部定義的變數,是區域變數,外面不能使用
-
區域作用域:區域變數的使用范圍
注意:
塊級作用域:一對大括號就可以看成是一塊,在這塊區域中定義的變數,只能在這個區域中使用,但是在js中在這個塊級作用域中定義的變數,外面也能使用;
說明:js沒有塊級作用域,只有函式除外
隱式全域變數:宣告的變數沒有var,就叫隱式全域變數
全域變數是不能被洗掉的,隱式全域變數是可以被洗掉的
定義變數使用var是不會被洗掉的,沒有var是可以洗掉的
function f1() {number=1000;//是隱式全域變數}f1();console.log(number);var num1=10;num2=20;delete num1;//把num1洗掉了delete num2;//把num2洗掉了console.log(typeof num1);console.log(num1+10);console.log(typeof num2);num=100;console.log(num);function f1() {var num=100;num+=10;}f1();//這個函式結束之后{var num=10;console.log(num);//10}console.log(num);if(true){var num=10;}console.log(num);for(var i=0;i<5;i++){var number=20;}console.log(number);var i=0;while (i<5){var num=100;i++;}console.log(num);function f1() {var num=10;}f1();console.log(num);var num=10;console.log(num);//10
作用域鏈
var num=10;function f1() {var num=20;function f2() {var num=30;function f3() {var num=50;console.log(num);}f3();}f2();}f1();
03 函式案例
求2個數中的最大值
function getMax(num1, num2) {return num1 > num2 ? num1 : num2;}console.log(getMax(10,20));//console.log(getMax);//函式的代碼function getMax(num1, num2) {return num1 > num2 ? num1 : num2;}var num1=10;var num2=20;//函式外面的num1和函式的形參num1不是同一個變數var result=getMax(num1,num2);console.log(result);console.log(getMax);//函式的代碼
求3個數中的最大值???????
function getThreeMax(x, y, z) {return x > y ? (x > z ? x : z) : (y > z ? y : z);}console.log(getThreeMax(10,2,24));
判斷一個數是否是素數(質數),只能被1和自身整除,質數是從2開始
用這個數字和這個數字前面的所有的數字整除一次(沒有1的,沒有自身的)
function isPrimeNumber(num) {for (var i = 2; i < num; i++) {if (num % i == 0) {//說明有一個數字整除了,就沒有必要向后繼續整除了,//此時就已經驗證出不是質數return false;}}return true;}// console.log(isPrimeNumber(7) ? "yyyyyes" : "nnnnnno")var aa = isPrimeNumber(17);if (aa) {console.log("yes");} else {console.log("no");}function isPrimeNumber(num) {for(var i=2;i<num;i++){if(num%i==0){//說明有一個數字整除了,就沒有必要向后繼續整除了,此時就已經驗證出不是質數return false;}}return true;}console.log(isPrimeNumber(8)?"是質數":"不是質數");var result=isPrimeNumber(2);if(result){console.log("這個數字是質數");}else{console.log("這個數字不是質數");}function aaa(x,y){return x-y;}console.log(aaa(99,88))
通過函式實作陣列反轉???????
function reverseArray(arr) {for (var i = 0; i < arr.length / 2; i++) {var temp = arr[i];arr[i] = arr[arr.length - 1 - i];arr[arr.length - 1 - i] = temp;}return arr;}console.log(reverseArray([1, 2, 3, 4, 5]));
通過函式實作冒泡排序???????
function sortArray(arr) {//控制比較的輪數for (var i = 0; i < arr.length - 1; i++) {//控制每一輪的比較次數for (var j = 0; j < arr.length - 1 - i; j++) {if (arr[j] > arr[j + 1]) {var temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}//end if}//end for}//end forreturn arr;}console.log(sortArray([0, 19, 34, 10, 100, 2]));
求一個數字的階乘???????
function getJieCheng(num) {var result = 1;for (var i = 1; i <= num; i++) {result *= i;}return result;}console.log(getJieCheng(5));//1*2*3*4*5
求斐波那契數列???????
function getFib(num){var num1=1;var num2=1;var num3=0;for(var i=3;i<=nnum;i++){sum=num1+num2;num1=num2;num2=sum;}return sum;}console.log(getFib(12))
02 函式作為引數使用
函式是有資料型別,資料型別:是function型別的
函式可以作為引數使用,如果一個函式作為引數,那么我們說這個引數(函式)可以叫回呼函式 只要是看到一個函式作為引數使用了,那就是回呼函式???????
function sayHi(fn) {console.log("GOOD");fn();//fn此時應該是一個函式}function suSay() {console.log("HELLO");}sayHi(suSay);function f1(x,y) {console.log(x+y);}f1(10,20);function f2(x,y) {console.log(x+y);}f2("HLS","MISS");function f3(x) {console.log(x);}f3(true);
04 arguments
計算n個數字的和
定義一個函式,如果不確定用戶是否傳入了引數,或者說不知道用戶傳了幾個引數,沒辦法計算,但是如果在函式中知道了引數的個數,等于也知道了每個引數的值.???????
//定義function f1() {//獲取的是函式在呼叫的時候,傳入了幾個引數//console.log(arguments.length);//使用arguments物件可以獲取傳入的每個引數的值console.log(arguments);}f1(10,20,30,40,100,200);//呼叫???????
function f1() {//arguments----->陣列使用------偽陣列---var sum=0;for(var i=0;i<arguments.length;i++){sum+=arguments[i];}return sum;}console.log(f1(10,20,30));
05 預決議:提前決議代碼
預決議:就是在決議代碼之前,預決議做什么事?
把變數的宣告提前了----提前到當前所在的作用域的最上面
函式的宣告也會被提前—提前到當前所在的作用域的最上面
函式呼叫的時候, 把會函式的宣告提升到作用域的上面???????
函式的宣告提升到作用域
f1();//呼叫var num=20;//這個變數的宣告會提升到變數使用之前function f1() {console.log(num);//var num=10;}function f1() {console.log("小蘇好猥瑣");}f1();function f1() {console.log("小蘇沒有助教猥瑣");}f1();
把變數的宣告提前???????
var num;console.log(num);num=10;function f1() {console.log("哈哈,助教好猥瑣哦");}//f1();//報錯
注意:預決議中,變數的提升,只會在當前的作用域中提升,提前到當前的作用域的最上面???????
function f1() {console.log(num);//undefinedvar num = 10;}f1();console.log(num);//報錯
函式中的變數只會提前到函式的作用域中的最前面,不會出去
預決議會分段(多對的script標簽中函式重名,預決議的時候不會沖突)???????
function f1() {console.log(num);//undefinedvar num=10;}f1();console.log(num);//function f1() {console.log("哈哈");}
?
添加公眾號「資訊技術智庫」:
🍅 硬核資料:20G,8大類資料,關注即可領取(PPT模板、簡歷模板、技術資料)
🍅 技識訓助:技術群大佬指點迷津,你的問題可能不是問題,求資源在群里喊一聲,
🍅 面試題庫:由各個技術群小伙伴們共同投稿,熱乎的大廠面試真題,持續更新中,
🍅 知識體系:含編程語言、演算法、大資料生態圈組件(Mysql、Hive、Spark、Flink)、資料倉庫、前端等,
👇👇送書抽獎丨技識訓助丨粉絲福利👇👇
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/321294.html
標籤:其他
