函数作为返回值练习 作用域和作用域链及预解析 闭包 闭包小案例
生活随笔
收集整理的這篇文章主要介紹了
函数作为返回值练习 作用域和作用域链及预解析 闭包 闭包小案例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
函數作為返回值練習
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Document</title><script>// 排序,每個文件都有名字,大小,時間,都可以按照某個屬性的值進行排序// 三部電影,電影有名字,大小,上映大小function File(name,size,time){// 電影名字this.name = name;// 電影大小this.size = size;// 電影的上映時間this.time = time;}var f1 = new File("jack.avi","400M","1998-08-08");var f2 = new File("tomas.avi","200M","2018-08-08");var f4 = new File("xiao.avi","800M","2010-08-08");var arr = [f1,f2,f4];function fn(attr){ // 函數作為返回值return function getSort(obj1,obj2){if(obj1[attr]>obj2[attr]){return 1;}else if(obj1[attr]==obj2[attr]){return 0;}else{return -1;}}}// arr.sort(getSort);var ff = fn("time");// 函數作為參數arr.sort(ff);for(var i=0;i<arr.length;i++){console.log(arr[i].name+"===="+arr[i].size+"===="+arr[i].time);}</script> </head> <body></body> </html>作用域和作用域鏈及預解析
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Document</title><script>// 變量---->局部變量和全局變量// 作用域:就是變量的使用范圍// 局部作用域和全局作用域// js中沒有塊級作用域----一對括號中定義的變量,這個變量可以在大括號外面使用// 函數中定義的變量是局部變量// while(true){// var num = 10;// break;// }// console.log(num);// {// var num2 = 100;// }// console.log(num2);// if(true){// var num4 = 1000;// }// console.log(num4);// function f1(){// // 局部變量// var num = 10;// }// console.log(num);// 作用域鏈:變量的使用,從里向外,層層的搜索,搜索到了就可以直接的使用了// 層層搜索,搜索到0級作用域的時候,如果還是沒有找到這個變量,結果就是報錯// 作用域 級別:0// var num = 10;// function f1(){// // 作用域鏈 級別:1// var num = 20;// function f2(){// // 作用域鏈 級別:2// var num = 40;// console.log(num);// }// f2();// }// f1();// 預解析:就是在瀏覽器解析這行代碼之前,把變量的聲明和函數的聲明提前(提升)// 到該作用域的最上面// 變量提升console.log(num);var num = 100;// 函數的聲明被提前了f1();function f1(){console.log("這個函數執行了");}// f2();var f2 = function(){console.log("小蘇好帥哦");};f2();</script> </head> <body></body> </html>閉包
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Document</title><script>// 閉包/*** 閉包的概念:函數A中,有一個函數B,函數B中可以訪問函數A中定義的變量或者是* 數據,此時形成了閉包(這句話不嚴謹)* 閉包的模式:函數模式的閉包,對象模式的閉包* 閉包的作用:緩存數據,延長作用域鏈* 閉包的有點和缺點:緩存數據* * 閉包的應用:*/// 函數模式的閉包:在一個函數中有一個函數// function f1(){// var num = 10;// // 函數的聲明// function f2(){// console.log(num);// }// // 函數調用// f2();// }// f1();// 對象模式的閉包:函數中有一個對象// function f4(){// var num = 10;// var obj = {// age:num// };// console.log(obj.age);// }// f4();// function f1(){// var num = 10;// return function(){// // console.log(num);// return num;// }// }// var ff = f1();// var result = ff();// console.log(result);// function f2(){// var num = 100;// return {// age:num// }// }// var obj = f2();// console.log(obj.age);</script> </head> <body></body> </html>閉包小案例
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Document</title><script>function f1(){var num = 10;num++;// console.log(num);return num;}console.log(f1());console.log(f1());console.log(f1());// function f1(){// var num = 10;// return function(){// num++;// return num;// }// }// var ff = f1();// console.log(ff());// console.log(ff());// console.log(ff());</script> </head> <body></body> </html>?
總結
以上是生活随笔為你收集整理的函数作为返回值练习 作用域和作用域链及预解析 闭包 闭包小案例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高阶函数之函数作为参数使用 高阶函数之函
- 下一篇: 闭包案例产生多个相同的随机数 沙箱