//1.函数没有重载
//2.函数表达式,函数为匿名函数,没有函数名,使用前必须先定义。
var f1 = function (){
return 1;
}
//3.函数声明
//函数声明提升,执行代码前,会先读取函数声明
function add(num){
return num+10;
}
function exeadd(somefunction,someargus){
return somefunction(someargus);
}
var ssadd = exeadd(add,10);
console.log(ssadd);
3.函数内部属性
arguments 和 this 对象
//arguments
function factorial(num) {
if(num <=1 ){
return 1;
}else {
return num * factorial(num-1);
}
}
//这个函数与函数名factorial 紧紧耦合在一起
function factorial(num) {
if(num <=1 ){
return 1;
}else {
return num * arguments.callee(num-1);
}
}
console.log(factorial(5)); //120
//使用arguments 对象的 callee 属性 指向函数本身,实现解耦合
//严格模式下使用函数表达式的方式
var factorial = (function f(num) {
if(num <=1 ){
return 1;
}else {
return num * f(num-1);
}
})
console.log(factorial(5));
//this 对象
//在 全局定义 this指的是 window
window.color = "red";
var o = { color: "blue" };
function sayColor(){
console.log(this.color);
}
sayColor(); //red
//独立调用
//虽然test()函数被嵌套在obj.foo()函数中,但test()函数是独立调用,而不是方法调用。所以this默认绑定到window
var a = 0;
var obj = {
a : 2,
foo:function(){
function test(){
console.log(this.a);
}
test();
}
}
obj.foo();//0
4.函数属性和方法
//length 函数的参数个数
//prototype
//call() 传递给函数的参数必须每个列出来
window.color = "red";
var o = { color: "blue" };
function sayColor(){
console.log(this.color);
}
sayColor(); //red
sayColor.call(this); //red
sayColor.call(window); //red
sayColor.call(o); //blue
apply() 传入 this,arguments(或者 array)
function sum(num1, num2){
return num1 + num2;
}
function callSum(num1, num2){
//return sum.call(this, num1, num2);
return sum.apply(this,arguments)
}
alert(callSum(10,10)); //20
网友评论