在ES6中我们可以做匿名类:
var entity = class {
}
Run Code Online (Sandbox Code Playgroud)
但我们也可以实例化它:
var entity = new class {
constructor(name) { this.name = name; }
getName() { return this.name; }
}('Foo');
console.log(entity.getName()); // Foo
Run Code Online (Sandbox Code Playgroud)
背后做了什么,它带来了什么好处以及它带来了什么警告?
javascript oop anonymous-function javascript-objects ecmascript-6
我知道你可以创建一个匿名函数,让编译器推断它的返回类型:
val x = () => { System.currentTimeMillis }
Run Code Online (Sandbox Code Playgroud)
仅为了静态类型,是否可以指定其返回类型?我认为这会让事情变得更加清晰.
让我们为这个问题创建一个值:
val a = 1 :: Nil
Run Code Online (Sandbox Code Playgroud)
现在,我可以证明匿名函数可以用这样的简写形式编写:
a.map(_*2)
Run Code Online (Sandbox Code Playgroud)
是否有可能写出这个功能的简写?:
a.map((x) => x)
Run Code Online (Sandbox Code Playgroud)
我的解决方案不起作用:
a.map(_)
Run Code Online (Sandbox Code Playgroud) 我使用匿名函数进行简单的数据值转换.匿名函数使用以下语法定义
sqr = @(x) x.^2;
Run Code Online (Sandbox Code Playgroud)
我想有一个简单的匿名函数,它返回多个输出,可以按如下方式使用...
[b,a] = myAnonymousFunc(x);
Run Code Online (Sandbox Code Playgroud)
Matlab文档表明这是可能的,但它没有给出定义这样一个函数所需语法的示例.
http://www.mathworks.co.uk/help/techdoc/matlab_prog/f4-70115.html#f4-71162
定义这样一个函数的语法是什么[ 在一行中,就像我帖子顶部的代码示例 ]?
目标
我想动态地将事件处理程序分配给整个站点的页面上的某些div.
我的方法
我使用jQuery绑定匿名函数作为选定div事件的处理程序.
问题
代码迭代div名称和相关URL的数组.div名称用于设置绑定目标,即将此事件处理程序附加到此div事件.
当事件处理程序成功绑定到每个div事件时,由这些事件处理程序触发的操作只会定位到数组中的最后一项.
所以我的想法是,如果用户将鼠标放在给定的div上,它应该为该div运行一个滑出动画.但相反,鼠标悬停在div1(rangeTabAll)上会触发div4的滑出动画(rangeTabThm).对于div 2,3等也是如此.顺序并不重要.更改数组元素,事件将始终以数组div4中的最后一个元素为目标.
我的代码 - (使用jQuery)
var curTab, curDiv;
var inlineRangeNavUrls=[['rangeTabAll','range_all.html'],['rangeTabRem','range_remedial.html'],
['rangeTabGym','range_gym.html'],['rangeTabThm','range_thermal.html']];
for (var i=0;i<inlineRangeNavUrls.length;i++)
{
curTab=(inlineRangeNavUrls[i][0]).toString();
curDiv='#' + curTab;
if ($(curDiv).length)
{
$(curDiv).bind("mouseover", function(){showHideRangeSlidingTabs(curTab, true);} );
$(curDiv).bind("mouseout", function(){showHideRangeSlidingTabs(curTab, false);} );
}
}
Run Code Online (Sandbox Code Playgroud)
我的理论
我要么没有看到一个令人眼花缭乱的语法错误或它的引用问题.最初我有以下语句来设置curTab的值:
curTab=inlineRangeNavUrls[i][0];
Run Code Online (Sandbox Code Playgroud)
因此,当发生问题我计算过,我改变了(通过for循环迭代)的参考curTab,我实际上改变了以前所有的匿名函数事件处理新curTab价值,以及参考....这是为什么事件处理程序始终以最后一个div为目标.
所以我真正需要做的是将curTab 值传递给匿名函数事件处理程序而不是curTab 对象引用.
所以我认为:
curTab=(inlineRangeNavUrls[i][0]).toString();
Run Code Online (Sandbox Code Playgroud)
会解决问题,但事实并非如此.同样的交易.所以很明显我错过了关于这个问题的一些关键,也许是非常基本的知识.谢谢.
javascript closures anonymous-function pass-by-reference pass-by-value
可能重复:
自动执行匿名JavaScript函数的括号位置?
有时我看到:
(function() { ... }());
Run Code Online (Sandbox Code Playgroud)
有时我看到:
(function() { ... })();
Run Code Online (Sandbox Code Playgroud)
这两种形式有区别吗?是否有任何令人信服的理由使用一种形式而不是另一种形式?
我想做类似的事情:
def creator()
return lambda { |arg1, arg2 = nil|
puts arg1
if(arg2 != nil)
puts arg2
end
}
end
test = creator()
test('lol')
test('lol', 'rofl')
Run Code Online (Sandbox Code Playgroud)
我收到一些语法错误:
test.rb:2: syntax error
return lambda { |arg1, arg2 = nil|
^
test.rb:3: syntax error
test.rb:7: syntax error
test.rb:14: syntax error
Run Code Online (Sandbox Code Playgroud)
红宝石有可能吗?我想将参数的默认值设置为lambda函数
鉴于这样的块:
var foo = {"regexp":/^http:\/\//,
"fun":function(){},
}
Run Code Online (Sandbox Code Playgroud)
将它存储在JSON中的正确方法是什么?
我还没有找到这个变量的任何完整的跨浏览器文档.
什么是arguments.callee?它是如何工作的?
它有哪些论据?
我感兴趣的是,如果可以使用C#编写类似于这个Javascript的代码:
var v = (function()
{
return "some value";
})()
Run Code Online (Sandbox Code Playgroud)
我能做的最多是:
Func<string> vf = () =>
{
return "some value";
};
var v = vf();
Run Code Online (Sandbox Code Playgroud)
但是我想要这样的东西:
// Gives error CS0149: Method name expected
var v = (() =>
{
return "some value";
})();
Run Code Online (Sandbox Code Playgroud)
有没有办法调用函数让它匿名?
javascript ×5
scala ×2
arguments ×1
c# ×1
closures ×1
ecmascript-6 ×1
function ×1
json ×1
lambda ×1
matlab ×1
oop ×1
parameters ×1
regex ×1
ruby ×1