什么是函数
是JavaScript代码,被定义一次,也可以知道调用多次。
也是对象,同对象操作和传递,既函数对象。
函数体内没有写没有return 返回为undefind。
函数申明
function add(){}
函数表达式
var add = function(){}
(function(){})();
return function(){}
var add = function foo(){}
命名函数表达式
var add = function foo(){}
add === foo //ie6-8 返回false
add === foo //ie9+:报错 获取不到foo
什么时候用命名函数表达式?
命名函数表达式可以递归调自己。
函数构造器
//可以不用new
var fun = new Function('a','b','console.log(a+b)')
fun(1,2);//3
同:
var fun = function(a,b){
return console.log(a+b);
}
fun(1,2) //3
构造器,作用域
//构造器内部变量外部无法访问
Function('var localVal = "local";console.log(localVal)')();
console.log(typeof localVal);//undefined
//可以读取外部变量,无法读取方法内的变量
var globaVal = 'global';
(
function(){
var locaVal = 'local';
Function('console.log(typeof locaVal,globaVal)')();
}
)();//undefined global
//funcation 都可以读取内部和外部变量
var out = 'out';
(
function(){
var ins = 'in';
(
function(){
console.log(out, ins);
})()
}
)();//out in
函数申明/函数表达式/构造器区别
函数声明:可以被前置,在定义时,可以通过函数名调用。不允许匿名。不能立即调用
函数表达式:允许匿名,可以立即调用。需要赋值给变量调用。
函数构造器:允许匿名,可以立即调用,没有函数名,需要赋值给变量调用。