函数
函数声明、函数表达式、命名函数表达式
函数声明:具有函数声明提升,不仅仅是声明提升,函数定义也提升了。function fn(){}
函数表达式:没有提升,所以可以在判断语句等块级作用域中使用两个或两个以上的函数表达式。var fn = function(){} 命名函数表达式:函数名和变量名相同。var fn = function fn(){}立即调用的函数表达式
立即调用的函数表达式的方法有好多种,最常用的是
(function fn(){})()
然而还可以这样写:
( function() {}() ); ( function() {} )(); [ function() {}() ]; ~ function() {}(); ! function() {}(); + function() {}(); delete function() {}(); typeof function() {}(); void function() {}(); new function() {}(); var f = function() {}();
通过在匿名函数附近使用括号或者一元运算符来引导解析器,指明运算符附近是函数表达式,从而实现立即调用的函数表达式
递归
通过arguments.callee来调用函数实现递归。
函数回调作用域
var myApp = {}; myApp.color = "green"; myApp.paint = function(node){ node.style.color = this.color } var findNodes = function(callback){ //.... if(typeof callback === "function"){ callback(found) } //.... } findNodes(myApp.paint)
回调函数中的this并不是指向myApp,而是指向全局对象,因为findNodes是全局函数
可以通过修改findNodes函数,findNodes(myApp.paint,myApp),再修改函数的内部。一般方法可以传字符串来避免输入两次对象名。比如findNodes("paint",myApp)。