1.function是對象,定義一個function就會在堆中創建一個對象。生成函數如下:
(1)
var a = new Function("document.write(1)");
(2)
var a = function(){document.write(1);}
(3)
function a(){
document.write(1);
}
(4)
(function(){
document.write(1);
}();
2.function對象是一種特殊的對象,調用function方法,會執行里面的代碼。
a();
輸出1
3.function內的基本數據類型會在函數退出執行環境棧時內存釋放。function訪問作用域鏈與定義時的位置有關。
function A(){
var a = 1;
return function(){
var b = 1;
cosnole.log(a);
}
}
var A()();
輸出1
函數A執行完后,由于函數A中嵌套匿名函數,所以不立即釋放函數A的變量。匿名函數是在函數A中定義的,匿名函數可以訪問A的作用域以及A作用域鏈上的作用域。當返回的函數之行時,打印出A出的變量的值1。當匿名函數執行完以后,退出函數執行環境棧,函數A內的變量釋放,退出函數執行棧。
4.function也可通過傳遞參數的方式,給函數傳值。
function A(){
var a = 1;
return function(b){
var bb = b;
cosnole.log(bb);
}
}
A()('b');
輸出b
5.function是一種引用數據類型,可當作其它類型的數據一樣處理。function可用作傳參、返回值。
function A(func){
var a = 1;
func(a);
}
function B(){
var b = 2;
A(function(a){console.log(a);console.log(b)};)
}
B();
輸出1 2
?