学习YUI.Ext 第二天

 更新时间:2007年03月10日 00:00:00   转载 作者:  
遇到一些JS的语法上的问题,没有理解透,恶补基本功!

 

匿名函数 An anonymous function

没有名字的就叫作“匿名函数”,像这个

function(x,y){return x+y}

没有名字当然不能直接调用,也无法调用;最多能只能把它赋值或闭包处理(闭包是什么下面再讲),如:

var sum =function(x,y){return x+y};

alert(sum(1,2));

这时候,与传统写法是等价的 function sum(x,y){return x+y}.这样的写法让人感觉更OOP,因为sum变量就包含了function...这个函数体;

还可以闭包的方式调用该函数:

(functioin(x,y){return x+y})(1,2) //返回值3

代码很简洁。注意括号的使用,形式为(exp)()。这种用法可以称作 闭包closure。
后面括号的是参数,把这些参数放进fn里面立即计算,得出一个值 3。这实际上是一个表达式的运算。没想到fn函数体也可以放进去参与运算^_^(Using function as an expression)!(基本功:表达式Expression,其含义是通过计算后,始终会返回一个值,无论这个表达式有多长)

fn还可以以参数形式传递(passing function as argument to other functions)

var main_fn = function(fn,x,y){return fn(x,y)}

var sum = function (x,y){
   return x+y;
}

alert(main_fn(sum,1,2)) // result:3

总结一下(by an IBM Engineer's article, refer to IBM website,最好用心记一记)

Functions need not have names all the time.

Functions can be assigned to variables like other values.

A function expression can be written and enclosed in parenetheses for application later.

Functions can be passed as arguments to oher funcitons.

再谈闭包,闭包的作用是形成一个定义域,举一个很白痴的例子 1+(2+3),括号部分优先运算,或者换个说法,括号里面的归为一个范围,这个范围我不理你做什么事情都是你里面做的事情,与括号外界无关(好像是废话,--我是这样想的,就是这样写的@#@),程序上的理解也是这样。js有函数定义域function scope,因此,当使用this指向一个对象出现问题的时候,可考虑使用闭包。具体例子在:http://www.svendtofte.com/code/practical_functional_js/

相关文章

  • YUI 读码日记之 YAHOO.lang.is*

    YUI 读码日记之 YAHOO.lang.is*

    在 YUI 框架的 %BULID%/yahoo/yahoo.js 中,包含了一系列的变量类型检测方法,它们被分装成 YAHOO.lang.is* 。其中,这些函数的大部分封装都是 typeof 操作符的封装,我个人比较敢兴趣的事 isArray 与 isValue 的两个函数。
    2008-03-03
  • 学习YUI.Ext 第七天--关于View&JSONView

    学习YUI.Ext 第七天--关于View&JSONView

    学习YUI.Ext 第七天--关于View&JSONView...
    2007-03-03
  • 学习YUI.Ext基础第一天

    学习YUI.Ext基础第一天

    学习YUI.Ext基础第一天...
    2007-03-03
  • YUI 读码日记之 YAHOO.util.Dom - Part.1

    YUI 读码日记之 YAHOO.util.Dom - Part.1

    DOM 操作是学习 Javascript 很重点的一块。YUI 提供了丰富的 DOM 操作接口,它们定义在 %BUILD%/dom/dom.js 中(封装成 YAHOO.util.Dom)。由于 DOM 操作比较重要,我计划将其分成几个 Part 分析。
    2008-03-03
  • 使用EXT实现无刷新动态调用股票信息

    使用EXT实现无刷新动态调用股票信息

    最近开始对ExtJS感兴趣了,今天正好有空,花了点时间,写了个基于Ext的例子。
    2008-11-11
  • Ext面向对象开发实践(续)

    Ext面向对象开发实践(续)

    我的上一篇文章《Ext面向对象开发实践》中简述了如何编写一个面向对象的数据维护小程序,但这一些都是基于一个客户端数据,即用户一旦刷新页面,所有的操作都将丢失,现在我们就接着上一篇文章来继续讲一下如何对数据表进行增、删、改、查操作。
    2008-11-11
  • Ext.MessageBox工具类简介

    Ext.MessageBox工具类简介

    Ext.MessageBox工具类简介,研究源码才能发现更多的东西。
    2009-12-12
  • 对YUI扩展的Gird组件 Part-1

    对YUI扩展的Gird组件 Part-1

    对YUI扩展的Gird组件 Part-1...
    2007-03-03
  • Ext 今日学习总结

    Ext 今日学习总结

    今天头儿分了一个项目的一张页面给我做!要修改几个问题!一个按F5局部刷新Grid网格中数据!第二个:网格一些信息是双击打开就已经读取!
    2010-09-09
  • Javascript的一种模块模式

    Javascript的一种模块模式

    在YUI中,我们仅用两个全局变量:YAHOO和YAHOO_config。YUI的一切都是使用YAHOO对象级的成员或这个成员作用域内的变量。我们建议在你的应用程序也使用类似的规则。
    2008-03-03

最新评论