標籤:log fun 數組 方法 執行環境 function 建立 pre 參數
1 // 函數的三種建立方法 2 function one(){ // 函式宣告,不屬於任何對象,始終預設為全域對象 3 console.log("第一個函數") 4 //預設有一個return this,返回函數中的內容 5 } 6 one(); //必須調用;可以在函式宣告前調用(預先處理變異機制) 7 8 var fn=function(){ //函數運算式 9 console.log("第二個函數")10 }11 fn(); //必須先聲明再調用 12 13 var fun=new Function(console.log("第三個函數")); //建構函式 無需調用,會自調
1 // 函數的4種調用方式 2 function one(){ 3 console.log("一個函數") 4 } 5 one(); //作為一個函數去調用 6 7 8 var person={ 9 name:"tom",10 age:18,11 speak:function(){12 console.log("English")13 }14 } 15 person.speak(); //函數作為對象的方法的調用16 17 18 function num(n1,n2){19 this.number1=n1;20 this.number2=n2;// 建構函式中的this沒有任何值21 }22 23 var i=new num(3,5);24 console.log(i.number1) // 建構函式會建立一個新的對象,新的對象會繼承建構函式的屬性和方法25 26 27 function myFunction(a,b){28 return a+b;29 }30 myFunction.call(this,2,5);31 32 var myArry=[2,5];33 myFunction.apply(this,myArry); //作為函數方法調用函數 call()和apply()是預定義的函數方法,apply傳入的是一個數組,call傳入的是參數
js的運行機制問題:(聲明提升)
1、在js中js引擎會優先解析var變數和function定義!在預解析完成後從上到下逐步進行!
2、解析var變數時,會把值儲存在“執行環境”中,而不會去賦值,值是儲存作用!例如:
alert(a); var a = 2; 這時會輸出undifiend,意思是沒有被初始化沒有被賦值!
這並不是沒有被定義,錯誤了的意思!
3、在解析function時會把函數整體定義,這也就解釋了為什麼在function定義函數時為什麼可以先調用後聲明了!其實表面上看是先調用了,其實在內部機制中第一步實行的是把以function方式定義的函數先聲明了(預先處理)
Js函數的三種建立、四種調用