`
virtualsolo
  • 浏览: 24159 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

Douglas Crockford - JavaScript function 3 of 4

    博客分类:
  • Tech
阅读更多

 function能像其他类型的值一样被传递、返回、存储。
直接使用function定义一个函数,等同于使用var定义一个变量,并将它赋值为一个function。

function foo() {}


等同于

var foo = function foo() {};


(function后的foo可省略)
内部函数(嵌套函数)

 一个function能被定义在其他function的内部,并且能访问外部function中定义的变量和参数。

闭包

 当外部的function返回后,内部function仍然能够执行并继续访问外部function的变量。

function fade(id) {
   var dom = document.getElementById(id);
   var level = 1;
   function step() {
      var h = level.toString(16);
      dom.style.backgroundColor = '#FFFF' + h + h;
      if (level < 15) {
          level += 1;
          setTimeout(step, 100);
      }
  }
  setTimeout(step, 100);
}

 函数对象

Function属于对象类型中的一种,所以它也能有自己“name/value对”,当function定义并作为一个对象的属性值存储时,将该function称为method。能用这些特性来模拟其他面向对象语言中构造函数的行为。

当用多于function定义时声明的参数个数调用function时,将忽略传递进来的多余参数;当少于定义时声明的参数个数,这些缺少的参数将被赋值为undefined。

 

function调用方式

function form: functionObject(arguments);

通常意义上的函数调用。this引用的是全局对象(对于浏览器就是window对象)

method form: thisObject.methodName(arguments);

此时将有一个隐含的this在起作用,该this引用thisObject。

constructor form: new functionObject(arguments);

一个新的对象将被创建,this引用这个新创建的对象。如果没有明确地写return,this(新创建的对象)将被返回。

apply(call) form: functionObject(thisObject,[arguments]);

 

调用方式 this引用指向
 function  the global object
 method  the object
 constructor  the new object

 

  • this相当于一个额外的参数,它的值取决于调用方式
  • this让method调用时可以访问到其他的对象
  • this是在运行时被绑定的

函数参数对象

是一个array-like的对象,(并非真正的array,只是访问方式类似)。前面所说的调用函数时多余的参数将被忽略,但argument里却包含了调用函数时传递给它的所有参数。

function sum() {
   var i;
   var n = arguments.length;
   var total = 0;
   for (i=0; i < n; i++)
      total += arguments[i];
   return total;
}

 隐含的全局变量

 对于任何声明在function之外的变量或者在function之内声明,但前面没有var的变量都是全局的。JSLint能帮助你找到那些隐含的全局变量。http://www.JSLint.com

 整个页面充斥着全局变量就会有冲突的危险。可以使用对象来组织自己的变量、函数等。

<script>
   Ext = {};
   Ext.data = {};
   Ext.data.JsonReader = function() {};
</script>

 此时,页面上只有一个全局变量Ext。

 

再谈封装

可以使用匿名的函数来包装自己的程序。

Yahoo.Trivia = function() {
   //define your common vars
   return {
      getNextPoser: function(cat, diff) {
 
      },
      showPoser: function() {
         
     }
  };
} ();

 可以从使用方式上来分析上面的代码。使用的方式大概如下:

Yahoo.Trivia.getNextPoser();
Yahoo.Trivia.showPoser();

 样子很像面向对象语言中的静态类了,不需要通过new便可调用类中的方法。实际上,当程序员书写到Yahoo.Trivia,便已经调用执行了函数并返回一个对象(也就是说Trivia被赋值为函数执行返回的结果):该对象包含两个属性,getNextPoser,showPoser。属性的值是Function类型。

 

挑了自己理解听懂的做了翻译,感兴趣的可以看他老人家的原版presentation

http://video.yahoo.com/watch/111595/1710607

分享到:
评论

相关推荐

    ECMAScriptBestPractices:基于道格拉斯·克罗克福德(Douglas Crockford)的Javascript YUI系列的ECMAScript中的良好实践的实现

    道格拉斯·克罗克福德(Douglas Crockford)是JavaScript领域的权威人物,他的许多观点和实践对ECMAScript的发展产生了深远影响。这个名为"ECMAScriptBestPractices"的项目,显然是基于Crockford的思想和他在YUI...

    JavaScript程序编码规范.pdf

    该规范由Douglas Crockford编写,并由cloudwater翻译成中文版。Crockford是一位著名的JavaScript专家,他提出的许多概念如JSON格式已经成为Web开发的标准之一。这份规范参考了Sun公司的Java编码规范,但由于...

    javascript - ajax ppt

    Douglas Crockford,JavaScript领域的权威专家,曾在一次名为"ajaxworld.ppt"的演讲中深入探讨了JavaScript的特性以及它与Ajax的关系。 JavaScript的核心理念: 1. **即时加载与执行**:JavaScript代码可以在页面...

    JavaScript语言精粹pdf权威指南 中文版

    《JavaScript语言精粹》是JavaScript编程领域的一本经典著作,由Douglas Crockford撰写,中文版为国内程序员提供了深入理解这门语言的机会。这本书详细介绍了JavaScript的核心特性,旨在帮助开发者掌握JavaScript的...

    JavaScript语言精粹

    《JavaScript语言精粹》由大师Douglas Crockford撰写。Crockford是雅虎(Yahoo!)的架构设计师,同时也是ECMA JavaScript 2.0技术委员会成员之一。凭借其在JavaScript领域的深厚造诣,Crockford对这门语言有着深刻的...

    讲解JavaScript的面向对象的编程

    该代码是JavaScript牛人Douglas Crockford的作品。本人一行注释一行代码翻译了该大师的艺术作品--目的说明它是在第1,2阶段文档演示的JavaScript面向对象的书写方式的进一步改进,它是现代JavaScript面向对象编程...

    JavaScript编程风格

    以下是一些由JavaScript权威Douglas Crockford提出的编程风格建议: 1. **大括号的位置**: - 在JavaScript中,为了防止因自动添加分号导致的错误,如在`return`语句后的对象字面量,推荐将区块起首的大括号跟在...

    浅谈Javascript编程风格

    本文将基于Douglas Crockford的演讲和其编写的代码规范,探讨JavaScript编程风格的一些关键点。 首先,关于大括号({})的位置。在JavaScript中,大括号用于表示代码块,常见的有两种风格:一种是大括号另起一行,...

    《JavaScript语言精粹[修订版]》高清版_2012.09_【蝴蝶书】_172页完整版

    Douglas Crockford 在本书中剥开了JavaScript 沾污的外衣,抽离出一个具有更好可靠性、可读性和可维护性的JavaScript 子集,让你看到一门优雅的、轻量级的和非常富有表现力的语言。作者从语法、对象、函数、继承、...

    JavaScript初学者应注意的七个细节小结

    Douglas Crockford 发明的JSON格式可以被原生JavaScript方法直接处理,无需转换,这使得JavaScript在处理复杂数据结构时更加高效。 例如,我们可以直接创建一个JavaScript对象,并将其转换为JSON字符串,这个字符串...

    js-good-parts:Javascript 注释

    道格拉斯·克罗克福德(Douglas Crockford)是JavaScript领域的权威人物,他的著作《JavaScript: The Good Parts》深入探讨了这种语言的精华与最佳实践。在书中,Crockford强调了正确使用注释来提高代码质量的重要性...

    你可能不知道的JavaScript的new Function()方法

    Douglas Crockford是JavaScript领域的先驱者之一,他曾经表示,JavaScript是如此易于上手,以至于程序员甚至可以在不了解其所有细节的情况下直接使用它。JavaScript的灵活性和简洁性使得它成为一种广泛使用的编程...

    json对象与字符串互转

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于JavaScript的一个子集,易于人阅读和编写,同时也易于机器解析和生成。在Web服务和客户端应用之间,JSON经常被用作数据传输的媒介,因为它的...

    Developer Notes for prototype.doc

    - _JavaScript: The Good Parts_ by Douglas Crockford - _Eloquent JavaScript_ by Marijn Haverbeke #### 参考资料 ##### 扩展 JavaScript 类 Prototype 扩展了多个核心 JavaScript 类,包括 Object、Number、...

    Lecture_8_JavaScript最佳实践1

    Douglas Crockford提到,减少全局变量的使用可以降低与其他应用、小部件或库发生冲突的可能性。 三、始终声明局部变量 在函数内部,所有变量都应声明为局部变量,使用`var`关键字。在严格模式下,未声明的变量会被...

    JavaScript 新手24条实用建议[TUTS+]

    4. 利用JSLint:JSLint是一个静态代码分析工具,由Douglas Crockford创建,用于检查JavaScript代码的错误和潜在问题。使用JSLint可以提前发现并修复语法错误、格式问题和潜在的逻辑错误,提升代码质量。 5. 延迟...

    JSON 入门指南 想了解json的朋友可以看下.docx

    - JSON由Douglas Crockford发明。 - JSON的设计初衷是为了弥补XML在Web应用中的不足,特别是在客户端JavaScript处理数据方面的问题。 - 随着Web应用的发展,特别是Ajax技术的普及,JSON逐渐成为一种非常流行的...

    proposal-dynamic-code-brand-checks:TC39建议可在动态代码加载之前进行灵活的品牌检查

    -Douglas Crockford,“ JavaScript:好的部分” eval及其友善的new Function存在问题,因为攻击者经常可以将其针对应用程序。 大多数代码都避免使用eval ,但JS程序不再小巧,并且像Crock编写该

    LearningJS:通过 Crockford 和其他来源的 Good Parts 书学习 JS

    "LearningJS: 通过 Crockford 和其他来源的 Good Parts 书学习 JS" 提到的学习资源,很可能是指 Douglas Crockford 的《JavaScript: The Good Parts》一书和其他相关材料。这本书是 JS 开发者的经典之作,Crockford ...

    JSON字段属性从大到小排序

    `JSON2.js`是由Douglas Crockford编写的,它提供了JSON.parse()和JSON.stringify()这两个方法,使得在旧版浏览器中也能处理JSON数据。在易语言中调用JavaScript支持JSON对象,可能是通过某种脚本引擎或者桥接技术...

Global site tag (gtag.js) - Google Analytics