coffeescript 函数 箭头表达式
函数
do
可以形成闭包,使方法作用域不受外部变化的影响。- 隐式返回最后一个表达式的值
- 函数调用省略括号
- 用
arguments
数组访问传递给函数的所有对象(低可读性)
@name
为this.name
的简写,this
表示上下文环境。相应的,有new
关键字,apply
和call
方法。
- 函数调用前若有
new
关键字,会把函数作为构造函数创建一个新对象,上下位即为该新对象。 - 使用
call
或者apply
调用函数时,给定的第一个参数为上下文。 - 函数作为对象的属性
obj.func
来调用时,该对象为上下文。 - 若不满足以上条件,则上下文为全局。
由于上下文在调用时绑定,因此可能会出现预料之外的情况。将->
改为=>
,可以确保this
的意义与函数定义所在位置的this
一样。
属性参数可以缩短代码,如
setName = (name) -> @name = name
可以简写为
setName = (@name) ->
使用表达式作默认参数,则表达式将在函数被调用的上下文中执行。
函数调用可以写成do f
。例如do (x) -> ...
是((x) -> ...)(x)
的简写,这个例子是node.js循环中捕获变量的常用写法。
=>箭头函数表达式:
不绑定this
在箭头函数出现之前,每个新定义的函数都有它自己的 this
值(在构造函数的情况下是一个新对象,在严格模式的函数调用中为 undefined,如果该函数被作为“对象方法”调用则为基础对象等)。This
被证明是令人厌烦的面向对象风格的编程。
function Person() {
// Person() 构造函数定义 `this`作为它自己的实例.
this.age = 0; setInterval(function growUp() {
// 在非严格模式, growUp()函数定义 `this`作为全局对象,
// 与在 Person()构造函数中定义的 `this`并不相同.
this.age++;
}, 1000);
} var p = new Person();
在ECMAScript 3/5中,通过将this
值分配给封闭的变量,可以解决this
问题。
function Person() {
var that = this;
that.age = 0; setInterval(function growUp() {
// 回调引用的是`that`变量, 其值是预期的对象.
that.age++;
}, 1000);
}
或者,可以创建绑定函数,以便将预先分配的this
值传递到绑定的目标函数(上述示例中的growUp()
函数)。
箭头函数不会创建自己的this,它只会从自己的作用域链的上一层继承this
。因此,在下面的代码中,传递给setInterval
的函数内的this
与封闭函数中的this
值相同:
function Person(){
this.age = 0; setInterval(() => {
this.age++; // |this| 正确地指向 p 实例
}, 1000);
} var p = new Person();
与严格模式的关系
鉴于 this
是词法层面上的,严格模式中与 this
相关的规则都将被忽略。
function Person() {
this.age = 0;
var closure = "123"
setInterval(function growUp() {
this.age++;
console.log(this.age);//NAN
}, 1000);
} var p = new Person(); function PersonX() {
'use strict'
this.age = 0;
var closure = "123"
setInterval(()=>{
this.age++;
console.log(this.age);//正常的计数
}, 1000); } var px = new PersonX();
严格模式的其他规则依然不变.
coffeescript 函数 箭头表达式的更多相关文章
- es6 箭头函数【箭头表达式】
箭头函数,通过 => 语法实现的函数简写形式,C#/JAVA8/CoffeeScript 中都有类似语法.与函数不同,箭头函数与其执行下文环境共享同一个 this.如果一个箭头函数出现在一个函数 ...
- typeJavaScript笔记----字符串,参数,函数,表达式,循环
一.字符串新特性--双丿(撇)号声明字符串 .多行字符串 var myName = `fang my hao li jsk c sdf` //这样不会报错. .字符串模板 console.log(`q ...
- typescript 箭头表达式
箭头表达式:用来声明匿名函数,消除传统匿名函数的this指针问题 1.无参 var sum = () => {} 2.一个参数 var sum = arg2 => {} 3.多个参数 va ...
- js里typeof和instanceof和箭头表达式要注意的地方,以及其他
如果学过类似C#这样的语言,然后定义两个类class Mu{}和class Ku{},那么显然typeof Mu != typeof Ku的,但是在js里则不是这样,对于Mu和Ku的对象进行typeo ...
- 函数——箭头函数&自执行函数(二)
一.箭头函数是在es6中添加的一种规范,它相当于匿名函数,简化了函数的定义. 1.语法 a.function用var,let,cost来表示: b.参数要写在第一个等号后面: 参数有多个,需要加一 ...
- c#中匿名函数lamb表达式
c#中匿名函数lamb表达式 实例一:(其实,这样都是些语法糖) using System; using System.Collections.Generic; using System.Linq; ...
- orale做报表常用函数和表达式的总结
最近一段时间连续的做了几十张报表,通过原生sql对数据进行分析 ,也算是有了一定的了解,发现其中一些函数和表达式使用频率较高,现总结如下: (1).round()函数 round函数说白了就是把一 ...
- javascript函数定义表达式和函数声明的区别
在javascript中,函数有两种定义写法,函数定义表达式和函数声明,其例子分别如下所示: var test = function(x){ return x; } function test(x){ ...
- [转]javascript函数定义表达式和函数声明的区别
在javascript中,函数有两种定义写法,函数定义表达式和函数声明,其例子分别如下所示: var test = function(x){ return x; } function test(x){ ...
随机推荐
- 【Zookeeper02】ZK的作用以及使用
上一篇介绍了ZK的安装以及集群的搭建,这只能算是个软件安装过程,具体是做什么的.怎么用也没有做解释,这一篇中博主就自己的私人理解简单写一下: 1.是什么: a.Zookeeper是一个分布式协调服务, ...
- 【python3两小时快速入门】入门笔记02:类库导入
昨晚遇到了一个问题:pip下载了request类库,以及在pyCharm的setting中下载了request类库,项目左侧也能显示出requst文件夹,但是引入报错! 这里贴一下我的解决方案,在此记 ...
- List中的set方法和add方法
public class TestList {public static void main(String[] args){ List l1 = new LinkedList(); for(i ...
- PyCharm2018 汉化&激活
一.汉化 将下载好的resources_cn_PyCharm_2018.1_r2.jar 放入pycharm 的lib 目录中,启动app即可 下载链接: https://pan.baidu.com/ ...
- Python编程菜鸟成长记--A1--01--编程语言介绍
目录 1.重点知识 2.什么是编程?为什么要编程? 3.有哪些编程语言? 3.1.机器语言 3.2.汇编语言 3.3.高级语言 3.3.1.编译型语言 3.3.2.解释型语言 3.4.小结 4.主流编 ...
- Codeforces Gym101246J:Buoys(三分搜索)
http://codeforces.com/gym/101246/problem/J 题意:给出n个点坐标,要使这些点间距相同的话,就要移动这些点,问最少的需要的移动距离是多少,并输出移动后的坐标. ...
- HDU 5792:World is Exploding(树状数组求逆序对)
http://acm.hdu.edu.cn/showproblem.php?pid=5792 World is Exploding Problem Description Given a sequ ...
- SqlCommand的Parameters的用法
SqlCommand的Parameters的用法 可以用的SqlCommand的Parameters的方法SqlCommand cmd=new ("insert into notice(ly ...
- 消息队列(MQ)
什么是消息队列 消息队列,即MQ,Message Queue. 消息队列是典型的:生产者.消费者模型.生产者不断向消息队列中生产消息,消费者不断的从队列中获取消息.因为消息的生产和消费都是异步的,而且 ...
- Spring源码阅读-ApplicationContext体系结构分析
目录 继承层次图概览 ConfigurableApplicationContext分析 AbstractApplicationContext GenericApplicationContext Gen ...