函数与作用域

2017-12-17  本文已影响0人  akena
函数声明和函数表达式
作用域和声明提升
arguments 对象
函数的重载
立即执行函数表达式 IIFE

IIFE 即声明一个匿名函数并即时调用

 // 这是一个自执行函数,函数内部执行的是自己,递归调用
 function foo() { foo(); }

 // 这是一个自执行匿名函数,因为它没有函数名
 // 所以如果要递归调用自己的话必须用arguments.callee
 var foo = function() { arguments.callee(); };

 // 这可能也算是个自执行匿名函数,但仅仅是foo标志引用它自身
 // 如果你将foo改变成其它的,你将得到一个used-to-self-execute匿名函数
 var foo = function() { foo(); };

 // 有些人叫它自执行匿名函数,尽管它没有执行自己,只是立即执行而已
 (function(){ /* code */ }());

 // 给函数表达式添加了标志名称,可以方便debug
 // 但是一旦添加了标志名称,这个函数就不再是匿名的了
 (function foo(){ /* code */ }());

 // 立即执行函数也可以自执行,不过不常用罢了
 (function(){ arguments.callee(); }());
 (function foo(){ foo(); }());
递归求n!
function fn(i) {
  if(i < 2) {
    return 1
  }else {
    return i*fn(i-1)
  }
}

//简写
function fn(i) {
  return i<2?1:i*fn(i-1)
}

refer to 变量对象 | cnblogs立即执行函数表达式(IIFE) | segmentfault立即执行函数 | 每日一题

上一篇下一篇

猜你喜欢

热点阅读