理解JavaScript为什么应该作为函数式 在JavaScript中,函数是程序执行过程中的主要模块单元 函数是第一类对象 通过字面量创建 function ninjaFunction(){} 赋值给变量,数组项或其它对象的属性 var ninjaFunction = function() {} ninjaFunction.push(function(){}) ninja.data = function(){} 作为函数参数来传递 call(function(){}) 作为函数的返回值 fun…
面向对象和原型 理解原型 在JavaScript中,可通过原型实现继承.原型的概念很简单.每个对象都含有原型的引用,当查找属性时,若对象本身不具有该属性,则会查找原型上是否有该属性. 每个对象都可以有一个原型,每个对象的原型也可以拥有一个原型,以此类推,形成一个原型链.查找特定属性将会被委托在整个原型链上,只有当没有更多的原型可以进行查找时,才会停止查找. 对象构造器与原型 当用作为函数调用Ninja时,什么都不会做.在用new操作符时返回一个对象,并且设置了它的原型为Ninja,所以ninja…
很棒的一本,可惜没有中文版.…
最近,在阅读 jQuery 之父 John Resig 力作:Secrets of the JavaScript Ninja(JavaScript忍者秘籍).关于第九章提及的 JavaScript 之运行时代码,感觉蛮不错.因此,顺便在博客园记录一下. 有关运行时.编译时就不再做过多介绍,相信,大部分同学或多或少熟悉一门强类型语言,比如:C#.Java 之类.就以 C# 为例,程序员编写的 .cs 文件最终将编译成 .dll 程序集中,如果 .cs 中有语法错误,将无法编译通过.而像 JavaS…
函数是根基 理解函数为什么如此重要 JavaScript 是一门 函数式语言 . 函数为什么是第一型对象 在 JavaScript 中,函数可以共处,可以将其视为其他任意类型的 JavaScript 对象而进行使用,除此之外,函数还有一个特殊的功能,它们可以 被调用(通常以 异步方式 进行调用). 对象在 JavaScript 中有如下功能: 它们可以通过字面量创建. 它们可以赋值给变量.数组或其他对象的属性. 它们可以作为参数传递. 它们可以作为函数的返回值进行返回. 它们拥有动态创建并赋值的…
匿名函数 对于什么是匿名函数,这里就不做过多介绍了.我们需要知道的是,对于JavaScript而言,匿名函数是一个很重要且具有逻辑性的特性.通常,匿名函数的使用情况是:创建一个供以后使用的函数.简单的举个例子如下: window.onload = function() { alert('hello'); } var templateObj = { shout:function() { alert('作为方法的匿名函数') } } templateObj.shout(); setTimeout(f…
Javascript有很多有趣的用法,在Google Code Search里能找到不少,举一个例子: <script> ~function() { alert("hello, world."); }(); </script> 试一下就知道这段代码的意思就是声明一个函数,然后立刻执行,因为Javascript中的变量作用域是基于函数的,所以这样可以避免变量污染,但这里的位运算符『~』乍一看让人摸不到头脑,如果去掉它再运行则会报错:SyntaxError. 在阐述…
柯里化 柯里化又称部分求值,其含义是给函数分步传递参数,每次传递参数后部分应用参数,并返回一个更具体的函数接受剩下的参数,这中间可嵌套多层这样的接受部分参数函数,直至返回最后结果. 因此柯里化的过程是逐步传参,逐步缩小函数的适用范围,逐步求解的过程. 请见我的另一篇博客· 浅析 JavaScript 中的 函数 currying 柯里化 反柯里化 相反,反柯里化的作用在与扩大函数的适用性,使本来作为特定对象所拥有的功能的函数可以被任意对象所用. 即把如下给定的函数签名, obj.func(arg…
前言 在JDK8和ES6的语言发展中,在Java的lambda表达式和JavaScript的箭头函数这两者有着千丝万缕的联系:本次试图通过这篇文章弄懂上面的两个"语法糖". 简介 Lambda 表达式来源于 C# 5.0,但又不太确定,于是查了下 百度百科:Lambda表达式,仍然没有得到明确的答案,所以懒得去纠结这个问题了. 箭头函数(arrow function),就是C#中的lambda表达式,据说Java8也把它加入了.但不管怎样,JS正在从其它语言吸纳优秀的特性(比如yiel…
函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对于其他面向对象语言,在JavaScript中的函数是特殊的,函数即是对象.JavaScript可以把函数赋值给变量,或者作为参数传递给其他函数,甚至可以给它们设置属性等. JavaScript的函数可以嵌套在其他函数中定义,这样定义的函数就可以访问它们外层函数中的任何变量.这也就是所谓的"闭包&qu…