JS函数

2018-06-29  本文已影响0人  是小张啊啊
函数声明
function fn(){

}
function fn(){

}()//错误的!!!
function() {
  alert(1);
}//匿名函数!!
函数表达式
var fn = function(){//匿名函数赋值,常用方法
  alert(1);
};
fn();//变量表达式执行
console.log(fn);//---->f(){alert(1);}
var fn = function(){//匿名函数赋值,常用方法
  alert(1);
}();//变量表达式可以执行
//fn();此时该变量名 + () 不可以执行 该变量表达式,会报错!!!!
var fn = function ab(){//具名函数赋值
  alert(1);
};
fn();//变量表达式同样执行,ab()不可以进行执行,会报错!!!
console.log(fn);//---->f ab(){alert(1);}
匿名(具名)函数转函数表达式
(function (){//匿名函数
  alert(1);
})();//末尾的()表示调用
(function fn(){//具名函数
  alert(1);
})();//末尾的()表示调用

以下方法也可以执行

!function(){
  alert(1);
}();
~function(){
  alert(1);
}();
+function(){
  alert(1);
}();
(function(){
  alert(1);
}());
形参和实参(两者位置一一对应)
function fn(a,b){
  console.log(1);
}
fn(2,3);
function fn(a,b){
  console.log(a+b);
}
fn(2,3,4);----->2=a,b=3,4没有对应,结果为5
function fn(a,b){
  console.log(a+b);
}
fn(2);----->2=a,b没有对应赋值,即b声明的但是没有进行赋值结果为NaN
fn("2");----->字符串+undefined,结果是"2undefined".
arguments
function add(){
  console.log(arguments);
  console.log(arguments.length);
  var sum = 0;
  for(var i = 0;i<arguments.length;i++){
    sum += arguments[i];
  }
}
add(1,2,3,4,5);
function (){
  console.log(arguments.callee);
}
return函数返回值
function fn(){
  return 10;//直接退出
  console.log(1);//函数不会执行该语句
}
fn();//执行该函数
console.log(fn());//返回值为10
练习1
document.onclick = function () {
        fn(2);
    };    
    function fn(x) {
        alert(x);
    }
   //声明一个名为fn1 的函数,fn2为此函数的一个形参
   function fn1(fn2) {
       fn2(2);//调用fn2()函数执行此函数,传2,alert(2);
   }
   //执行fn1函数
    fn1(
        //给变量fn2赋值一个函数,给此函数传一个参数x
        fn2 = function (x) {
            alert(x);
        }
    );
var x;
   x = function () {
       alert(1);
   };//函数没有被执行
   console.log(x);//x = ƒ () {alert(1);}
var x;
   x = function () {
       alert(1);
   }();//函数被执行
   console.log(x);//x = undefined,函数的返回值为undefined
练习2
document.onclick = fn;//函数在点击的时候才会被执行
   function fn() {
           alert(1);
  }
console.log(fn());//fn()的返回值为undefined
document.onclick = fn();//在点击时,函数执行的是里面的return function(){alert(1);}

   function fn() {
       return function(){
           alert(1);
       }
  }
document.onclick = fn()();

   function fn() {
       return function(){
          return function(){
             alert(1);
          }
       }
  }
console.log(fn();)//返回的是:f(){return function(){alert(1);}}

console.log(fn()();)//返回的是:f(){alert(1);}

fn()()();执行该函数

document.onclick = fn()();///对于onclick来说:用两个()()进行函数执行
拓展arguments
function add(num){
  if(num > 1){
    return num += add(num-1);
  }else{
     return num;
  }  
}
add(10);
console.log(add(10));
var add = (function (num){
  if(num > 1){
    return num += arguments.callee(num-1);
  }else{
     return num;
  }  
})(10);
console.log(add);
上一篇下一篇

猜你喜欢

热点阅读