Function
return后代码不执行
return后没东西,返回的是undefined
定义函数的3种方式:
语句式 函数可以预解析,速度快,局部作用域 2个函数重名定义,后者覆盖前者
function sum(a,b) {
console.log(a + b);
}
直接量式 顺序解析,快,局部作用域
var sum = function sum(a,b) {
console.log(a + b);
}
构造函数方式 顺序解析,慢,顶级作用域
var sum = new Function('a','b','console.log(a + b)');
sum(10,20);
function f(){
return 1
}
alert(f())
var f = new Function("return 2")
alert(f())
var f = function(){
return 3
}
alert(f())
function f(){
return 4
}
alert(f())
var f = new Function("return 5")
alert(f())
var f = function(){
return 6
}
alert(f())
// 语句式是预解析,相同覆盖 4 其他数序执行 2 3 3 5 6
函数作用域的例子
构造函数是顶级作用域
var k = 1
function w(){
var k = 2;
//function m(){ return k } //2
//var m = function(){ return k } //2
var m = new Function('return k') //1
alert(m())
}
w()
arguments对象
形参和实参数量可以不一致
形参的个数 函数名.length
function m(a,b){
return a+b
}
m(1,2,5)
alert(m.length) // 或者是 arguments.callee.length
实参获得 必须在函数内部 arguments [0]
function m(a,b){
alert(arguments[0])
alert(arguments.length)
return a+b
}
m(1,2)
arguments 函数的参数 只是与数组类似,不是真正的Array实例
arguments.callee 用于递归 指向函数本身、
function xx(n){
if(n>1){
return n*arguments.callee(n-1)
}else{
return 1
}
}
xx(3) //6
严格模式下不要使用arguments.callee