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