基本功:一句話體現你的能力,經驗,遇到什麼問題用什麼方法,有自己的一套思想。學會企業級開發。
編程的思想:高內聚,低耦合。內部代碼聯繫度強,意味着模塊化強,低耦合,重複度低,讓一個代碼塊有強的功能性,獨立性。
棧:stack 堆:heap 域:scope
函數名命名規則:
不能數字開頭
小駝峯命名法:複合單詞:第一個單詞小寫,之後的單詞首字母大寫
1.爲什麼叫函數
數學中 y = f(x) 有一個輸入,有一個輸出
function test (a,b){
執行語句;
}
這叫函數聲明(也叫字面量),function 相當於var ;
還有一種是 函數表達式: test 在函數外部不可見,但函數內部可以調用。
var sum = function test (a,b){ //test 可以省略,
執行語句;
test();// true
}
test();// undefined
console.log(sum.name)//test
2. 函數的參數和形參實參的映射關係:
形參默認值:undefined
function test(a,b){
console.log(test.length);//2
console.log(argements.length);//3
console.log(arguements);//[1,2,3]
}
test(1,2,3);
在函數內部可以更改實參的值:
function test(a,b){
a = 3;
console.log(argements[0]);
}
test(1,2);//3
但這裏arguments0和 a=3不是同一個,1 是存在堆內存,3是存在棧內存。 arguments是數組,引用類型,存在堆內存中,他們是存在一種映射關係。形參是一個佔位,映射arguments
3.函數遞歸:函數自己調用自己,性能不佔優勢,佔用內存
n的階乘:
不能用 for循環:
分析: 5!= 54!
4!= 43!…
function factorial(n){
if(n === 1){
return 1;
}
return n*factorial(n-1);
}
factorial(4);//24
斐波那契數列:
function fibonacci(n){
if(n <=2){
return 1;
}
return fibonacci(n-1)+fibonacci(n-2);
}
fibonacci(5);//5
4.立即執行函數:() 全程IIFE
普通函數存在全局執行環境中,ECglobal,不釋放,佔內存的
我們需要一個函數來只是用一次,然後銷燬,於是產生了立即執行函數;
表達式纔可以使用立即執行符號——();
基本寫法:
(function(){})(); (function(){}());
var sum = (function(){return 10})();//sum = 10;
(function test(a){
console.log(a);//10
})(10);
var a = (6,5)//5 逗號是運算符,返回 “,” 後面的數
5. call apply 更改this指向 ,還有一個是bind
call 和apply 是function的一個方法;
function test (){
}
test.call();//相當於test()
二者的區別在於:call傳的是字符串,apply傳的是數組,call(Object,’name’);apply(Object,[‘name’])
6.callee 和caller
callee表示返回該調用函數;caller表示返回調用該函數的函數
function test1(){
console.log(arguments.callee.length); //表示形參長度
test2();
}
test1();
function test2(){
console.log(test2.caller);
}
test1();//返回test1 函數