2015-09-01 123 views
1

如果我有这样的函数表达式可以转换为Lambda表达式

module MyModule{ 
    export var myfunc = function() { 
    } 
} 

片断,然后ReSharper的建议转化为

module MyModule{ 
    export var myfunc =() => { 
    } 
} 

但是这不工作时,该功能使用this

module MyModule{ 
    export var myfunc = function(){ 
     var x = $(this); 
    } 
} 

为什么转换不起作用this正在使用中?

(如果你想知道为什么我一个模块中使用this,这是因为这种方法是事件处理程序)

+0

你的意思是resharper不建议只是因为使用'this'而将函数转换为箭头函数? – MinusFour

+0

@MinusFour我读到的问题意味着当OP *做*转换时,它不起作用,当函数期望'this'被绑定为传统函数。 (例如,当你将一个函数传递给'jQuery.each()'时,你期望的事情的方式)。 – Pointy

+0

@MinusFour我需要编辑我的答案。刚发现当函数位于模块内时它不起作用。 – gsharp

回答

2

箭头功能被隐式设置,使得this是不管它是在范围中的箭头函数被实例化。这是因为如果你写:

var myfunc =() => { ... } .bind(this); 

我觉得背后的概念是,它往往是这样的回调确实想从外上下文访问this值的情况。正如你所看到的,有时他们没有。