函式的五種宣告方式.
- 具名函式
function a(x){ console.log(x); return undefined; } /*console.log()只接受字串,如果不是字串會自動呼叫toString()方法. 得到"function a(x){console.log(x)}"*/ 複製程式碼
-
匿名函式
var a = function(x)( console.log(x) ) 複製程式碼
-
var x = function y(input1,input2){} 複製程式碼
和直接宣告具名函式的區別是如果執行
console.log(y)
會提示 y is not defined.如果執行console.log()
則會列印出函式的內容. - window.Function
q = new Function('x','y','return x+y'); q(1,2); //結果為3 var n = 1; q = new Function('x','y','return x+'+n+'+y'); q(1,2); //結果是4 複製程式碼
- 箭頭函式
f1 = (x,y)=>{return x+y} f1(6,6); //結果是12 //只有一句語句時可以省略花括號和return f2 = (x,y) =>x+y; f2(1,2); //結果是3 //只有一個引數時小括號也可省略 f3 = x => x*x; f3(3); //結果是9 複製程式碼
函式是一段可以反覆呼叫的程式碼塊.
eg:
function triangleArea(h,w){
var n = h*w;
var m = n/2;
return m;
}
triangleArea.call(undefined,1,2); //結果是1
複製程式碼
以上就是一個能求三角形面積的函式.
那麼什麼是this,arguments呢?triangleArea.call(undefined,1,2);
中的
下面舉例說明:
- undefined就代表this.
- 後面的引數就可以用arguments來表示.
f = function(){
'use strict';
console.log(this);
console.log(arguments);
}
複製程式碼
執行f.call(1,2,3);
得到如下結果.
Array.prototype
就是偽陣列.它的__proto__
指向Object.prototype
.
什麼是閉包呢?
var a = 1;
function b(){
console.log(a);
}
複製程式碼
向上面這種一個函式使用了它範圍外的變數,那麼這個函式與這個變數合稱閉包.